我正在尝试创建字符串数组,我有函数rLine
从stdin读取行,每个输入的行我需要保存在数组中,但我对输入字符串的数量一无所知线。所以我需要动态增加数组大小来存储它们,我写了这样的代码:
char *res[2], *old = res;
while( 1 ){
line = rLine( stdin ), len = strlen( line );
res[row] = (char*)malloc( len + 1);
strcpy( res[row++], line);
res = (char**) realloc( res, row ); /* adding 1 more row, not sure adding size row? */
if ( /*some cond*/ ) break;
}
但是这段代码似乎不起作用,如何正确地声明数组并增加它的大小?
答案 0 :(得分:3)
正如我在评论中所说,指针数组与指针指针不同。您无法尝试将已分配的内存分配给阵列。
您应该将res
声明为指针指针,并在使用之前在循环开始时分配内存。
尝试这样:
char **res = NULL, *old = res;
while( 1 ){
line = rLine( stdin ), len = strlen( line );
res = (char**) realloc( res, sizeof(char**) * (row + 1) ); /* adding 1 more row, not sure adding size row? */
res[row] = (char*)malloc( len + 1);
strcpy( res[row++], line);
if ( /*some cond*/ ) break;
}
请记住,在大多数情况下,数组会衰减为指针,但下面的处理方式会有所不同。