2d数组,在C中使用calloc

时间:2010-04-19 00:47:42

标签: c++ c arrays multidimensional-array 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:语法错误:'为'”等等。我做错了什么想法?

4 个答案:

答案 0 :(得分:4)

  

没有代码不在函数中。

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

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

char** lines = init_lines();

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

话说回来,你所展示的代码没有任何错误。

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


错误:

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

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

答案 3 :(得分:0)

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