我必须为字符串分配一个包含1000个指针的数组,从stdin读取每个字符串并将每一行strdup到数组中。我做了以下事情:
char *array[1000];
int index = 0;
for (int i = 0; i < 1000; i++) {
scanf("%s", &array[i]);
strdup(array[i]);
}
我不确定这是否是正确的解决方法?
编辑:
所以,我需要使用空字符在每行的末尾插入换行符,我需要使用strlen函数来完成。我有以下内容:
// Plug the newline where the end of
// a line is equal to '0/'
index = strlen(array) - 1; // line 30
if (array[index] = '\n') { // line 31
array[index] = '\0';
}
但我收到以下错误:
linesort.c: In function ‘main’:
linesort.c:30: warning: passing argument 1 of ‘strlen’ from incompatible pointer type
/usr/include/string.h:399: note: expected ‘const char *’ but argument is of type ‘char **’
linesort.c:31: warning: assignment makes pointer from integer without a cast
linesort.c:31: warning: suggest parentheses around assignment used as truth value
请指教!
答案 0 :(得分:1)
您需要一个中间数组。你不能只在scanf("%s", &array[i]);
char *array[1000];
char buf[50] ;
char buf2[50] ;
for (int i = 0; i < 1000; i++) {
scanf("%49s", buf);
snprintf( buf2 , sizeof( buf ) , "%s\n" , buf ) ;
array[i] = strdup( buf2 );
}
return 0 ;
}
答案 1 :(得分:0)
没有
char *array[1000];
for (int i = 0; i < 1000; i++) {
scanf("%s", &array[i]); <-- array[i] has no memory here!!
strdup(array[i]); <-- array[i]=strdup(string)
}
自我给了你一个完整的答案 - 希望你从中学习。
答案 2 :(得分:0)
这不太可行。你有一个指针数组,这很好,但是你使用scanf("%s", &array[i]);
读取未定义的内存,因为它实际上并没有指向任何有效的存储空间。
相反,您需要分配一个临时缓冲区,例如
char tmp[500];
scanf("%s", tmp);
然后在临时缓冲区上使用strdup
,例如
array[i] = strdup(tmp);