c - 从文件读取字符串并将它们复制到数组中 - C

标签 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-复制字符串时,您必须为目标分配内存,在您的情况下,目标是您尚未为其分配任何内存的字符串[i]

2-您的字符串必须以 null 结尾

这段代码应该可以工作:

   #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 );
    }

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

关于c - 从文件读取字符串并将它们复制到数组中 - C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41939026/

相关文章:

C 程序 : A array containts items ID's, B 数组包含已售出的商品 查找包含未售出商品的 C 数组

c - int 变量在 'while' 循环后更改为 1

php - CodeIgniter - 数据库结果数组,但只有一行

java - java中比较数组元素

c++ - 能够包含 cpp.... 但不能包含标题?这是怎么回事?

c - 如何打印命令行 C 上的内容

javascript - 使用 Set 在对象数组中查找唯一元素不起作用

php - 读取ansi文件并转换为UTF-8字符串

java - 通过java Socket传输错误的文件

c - STM32F7-从RAM和闪存执行代码