将每一行绑定到数组中?

时间:2013-12-02 22:33:47

标签: c

我必须为字符串分配一个包含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

请指教!

3 个答案:

答案 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);