繁体   English   中英

2D数组,在C中使用calloc

[英]2d array, using calloc in C

我正在尝试创建2D字符数组到字符存储行。 例如:

lines[0]="Hello";
lines[1]="Your Back";
lines[2]="Bye";

由于行必须动态,所以我一开始不知道需要多少行。 这是我的代码:

int i;
char **lines= (char**) calloc(size, sizeof(char*));

for ( i = 0; i < size; i++ ){
lines[i] = (char*) calloc(200, sizeof(char));
}

for ( i = 0; i < size; i++ ){
free(lines[i]);
}

free(lines);

我知道每行不能超过200个字符。 我不断收到诸如“错误C2059:语法错误:'for'”之类的错误。 关于我做错了什么的任何想法?

没有代码不在函数中。

您不能只是将任意语句放在C和C ++中的函数之外。 不过,您可以使用函数来初始化变量:

char** init_lines() {
    char** ln = /* ... */;
    // your allocations etc. here
    return ln;
}

char** lines = init_lines();

您用C ++标记了问题-为什么不为此使用std::vector<std::vector<char> >

查看编译器错误,似乎您在其中一个for循环之前缺少分号-您在此处发布的代码似乎运行得很好。

首先,执行第一个calloc浪费时间,因为您立即使用第一个for循环对其进行了初始化。

话虽如此,您显示的代码完全没有错。

因此,您的错误可能出在其他地方,或者那不是您发布的代码。 我建议您发布确切的错误消息,以及经过剪切粘贴的违规行的副本,并在上下文的两侧各行十行。 这将使我们的生活变得轻松多了。


错误:

syntax error : 'for' syntax error : missing ')' before ';'
syntax error : missing ';' before '<' missing type specifier - int assumed

如您的评论之一所示,通常是由不平衡的括号引起的。 检查所有()字符,以确保它们在数量和位置上均相等。 可能是因为您在for之前的语句中缺少) ,但这只是有根据的猜测,因为您发布的代码没有这个问题。

在这里,我认为是不同的。 可能有用。 char指针或char double在编译期间隐式定义。 因此,它不需要显式定义,并且这样做可以显示语法错误。 如果不希望用NULL初始化垃圾值,请尝试使用char指针而不用calloc初始化。 就像使用calloc一样,您发现没有什么不同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM