首页 > 解决方案 > C:初始化字符指针(字符串)数组并使用 fgets 遍历文件以将值放入这些字符串中

问题描述

我想创建一个长度为 6 的字符指针(字符串)数组,
但我想通过遍历一个\n恰好分隔 6 行的文件来初始化它们

char* a[6];
FILE *fp = fopen("test.txt", "r");
for (int i = 0; i < 6; i++)
{
    fgets(a[i], MAXLEN, fp);
}

但它给了我一个分割错误。
如果有人可以先为此编写代码,然后解释到底是什么错误,那就太好了,谢谢。

标签: carraysstringpointers

解决方案


这里

char* a[6];

a是一个array of six char pointer和这里

 fgets(a[i], MAXLEN, fp); /* a[i] is a pointer & it doesn't have valid address, storing something into unreserved memory causes seg.fault */

它会导致分段错误,因为您试图将MAXLEN字节存储到每个字节中a[i],但您没有分配内存来存储相同的字节。因此,要么首先为下面的每个分配内存,a[i]然后将数据存储到其中,要么您可以使用二维 char 数组,如char a[num_of_line][max_char_line];.

for (int i = 0; i < 6; i++) {
 a[i] = malloc(MAXLEN); /* you can allocate as per req. */
 fgets(a[i], MAXLEN, fp); /* read manual page of fgets(), it stores \n at end of buffer in some condition, be aware of that */
}

fopen()还要检查and的返回值fgets()。并且一旦动态内存的使用完成,释放动态分配的内存以避免内存泄漏。


推荐阅读