2d数组,在C中使用calloc

我正在尝试为字符存储行创建一个二维字符串数组。 例如:

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:语法错误:’为’”等等。 我做错了什么想法?

没有代码不在函数中。

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

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

你用C ++标记了这个问题 – 为什么不为此使用std::vector >

看看编译器错误,看起来你在一个for循环之前缺少一个分号 – 你发布的代码似乎在这里工作得非常好。

首先,由于您使用第一个for循环立即初始化它们,因此执行第一个calloc是浪费时间。

话虽如此,你所展示的代码没有任何错误。

因此,您的错误位于其他位置,或者不是您发布的代码。 我建议你发布确切的错误信息以及违规行的剪切和粘贴副本以及它的任一侧的10行作为上下文。 这将使我们的生活更轻松地帮助你。


错误:

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

如你的一条评论中所示,通常是由不平衡的括号引起的。 检查所有()字符,确保它们的数量相等,并且位于正确的位置。 这可能是因为你在for之前的陈述中错过了a ) ,但这只是一个有根据的猜测,因为你发布的代码没有那个问题。

在这里,我的意见是不同的。 可能有用。 char指针或char double在编译期间隐式定义。 因此,不需要明确定义,这样做会显示语法错误。 尝试使用char指针而不用calloc进行初始化,如果不希望垃圾值初始化为NULL。 它就像使用calloc一样,你没有发现任何不同。