0

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

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'”之类的错误。关于我做错了什么的任何想法?

4

4 回答 4

4

不,代码不在函数中。

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

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

char** lines = init_lines();
于 2010-04-19T00:57:38.667 回答
1

你用 C++ 标记了这个问题——为什么不使用 astd::vector<std::vector<char> >呢?

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

于 2010-04-19T00:52:19.277 回答
1

首先,首先这样做是浪费时间,因为您立即使用第一个循环calloc初始化它们。for

话虽如此,您显示的代码没有任何问题。

因此,要么你的错误在别处,要么不是你发布的代码。我建议您发布确切的错误消息以及违规行的剪切和粘贴副本以及其两侧的十行以作为上下文。这将使我们的生活更轻松地帮助您。


错误:

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

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

于 2010-04-19T00:53:46.993 回答
0

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

于 2013-12-26T05:56:25.867 回答