我正在尝试从文件中读取一些字符串,并将它们复制到字符串数组中。 在得到分段错误之前,我无法理解为什么我设法正确读取文件中的第一个字符串。我知道文件中的每个字符串最多包含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 );
}
为什么我无法将成功的字符串存储到数组中?
答案 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 );
}
请注意,如果您不使用向量,则必须预先定义数组的大小,基本上数组的大小必须是常量