我是C
的新手,我正在尝试创建一个二维chars数组。
这背后的逻辑是获得未知数量的字符串输入
来自用户并能够获得这些字符串
(每个字符串以":"
结尾)但是当我尝试调试时,我得到了:
<Error reading characters of string>
这是代码:
int main()
{
int j = 0, rows = 50;
int i=0, lines = 50;
char **names;
names = (char**)malloc(lines*sizeof(char*));
if (i >= lines)
{
names = (char**)realloc(names, 10 * sizeof(char*));
lines = lines * 10;
}
for (j ; names[i][j] != ':'; j++)
{
*names = (char*)malloc(rows * sizeof(char));
if (j >= rows)
{
*names = (char*)realloc(names, 10 * sizeof(char));
rows = rows * 10;
}
scanf("%c", &names[i][j]);
}
i++;
return 0;
}
答案 0 :(得分:1)
for (j ; names[i][j] != ':'; j++)
在此循环中,您的测试条件会测试':'
中的names
。已为names
分配了内存,但它不包含任何内容(它与之比较的是什么?)。
使用do-while
循环,以便在读取names
中的字符之前执行循环。
此外,您还为char *
分配了内存,但是您没有正确地为这些指针分配内存。如果没有正确分配内存,您可以尝试将字符存储在它们指向的位置。这会引起问题。
为每个char *
分配内存,然后输入。
这样的一些事情可以做到 -
do{
names[i] =malloc(rows * sizeof(char));
if(names!=NULL){
if (j >= rows)
{
*names = (char*)realloc(names, 10 * sizeof(char));
rows = rows * 10;
}
scanf("%c", &names[i][j]);
j++;
i++;
}
}while(names[i][j]!=':')'
注意 -
1。您应该free
分配的内存。并且您首先if
将无法执行(无法理解其使用)。
2. 检查malloc
的返回。