从文件中读取字符串并将其复制到Array-C中

时间:2017-01-30 15:01:18

标签: c arrays file

我正在尝试从文件中读取一些字符串,并将它们复制到字符串数组中。 在得到分段错误之前,我无法理解为什么我设法正确读取文件中的第一个字符串。我知道文件中的每个字符串最多包含50个字符。

...

int i = 0;
char s[50]; 
int N=0;
FILE *fp;

//Figures out how many strings are stored in the file
while(fgets(s, 50, fp)!=NULL){N++}  

rewind(fp);

char *strings[N];  //This is the array where I want to store strings

for(i=0;i<N;i++){

    fgets(s, 50, fp);
    strcpy(strings[i], s);
    printf("%s", s );
}

为什么我无法将成功的字符串存储到数组中?

1 个答案:

答案 0 :(得分:0)

你犯了两个错误:

1-复制字符串时,你必须为目的地分配内存,在你的情况下目的地是你没有分配任何内存的字符串[i]

2 - 你的字符串必须以空值终止

此代码应该有效:

   #define MAX_STRINGS 100
   int i = 0;
   char s[50]; 
   int N=0;
   while(fgets(s, 50, fp)!=NULL){N++;}
   char strings[MAX_STRINGS][50];

   rewind(fp);
    for(i=0;i<N && i<MAX_STRINGS;i++){

        fgets(s, 50, fp);
        strcpy(strings[i], s);
        printf("%s", s );
    }

请注意,如果您不使用向量,则必须预先定义数组的大小,基本上数组的大小必须是常量