gpt4 book ai didi

c - 我正在尝试使用 malloc 创建一个 char 数组数组,然后使用 for 填充数组

转载 作者:行者123 更新时间:2023-11-30 15:37:48 25 4
gpt4 key购买 nike

我使用 malloc 创建了数组指针,并尝试用文本文件中的字符串填充,但是当我运行程序时,出现段错误。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

int main()
{
char *filename = "textfile.txt";
int rows = 10;

FILE *fp;
char* line = NULL;
size_t length = 0;
ssize_t read;


//make a 10 line *char array
char **aPointer = (char**)malloc(sizeof(char*)*rows);
if ((aPointer = NULL))
{
printf("Memory error\n");
exit(1);
}

//open file
if ((fp = fopen(filename, "r")) == NULL)
{
fprintf(stderr, "Error opening file");
exit(1);
}

//read line from file to array
int i = 0;
while(((read = getline(&line, &length, fp)) != -1) && (i<rows))
{
strcpy(aPointer[i], line);
i++;
}

return 0;
}

-段错误(核心转储)-

如何填充数组?

最佳答案

这是错误的一个很可能的原因:

strcpy(aPointer[i], line);

您实际上并未初始化aPointer[i],因此aPointer[i]的值是不确定的。使用此值会导致未定义的行为,并且由于它被用作指针,很可能会导致崩溃。

一个快速的解决方案是在每次调用 getline 之前将 line 设置为 NULL,因为该函数随后将分配该行所需的空间,然后你就可以分配

line = NULL;
while(i < rows && (read = getline(&line, &length, fp)) != -1)
{
aPointer[i++] = line;
line = NULL;
}

注意:我更改了 while 的条件顺序,以使用 && 运算符的短路功能,如果您读得足够多,则不会读取一行行。

使用完毕后,不要忘记释放分配的内存。

关于c - 我正在尝试使用 malloc 创建一个 char 数组数组,然后使用 for 填充数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22063905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com