gpt4 book ai didi

c - 打印文本文件的最后几行

转载 作者:太空宇宙 更新时间:2023-11-04 02:23:14 25 4
gpt4 key购买 nike

目前,我正在尝试创建一个 C 程序来打印文本文件的最后几行,通过命令行读入。但是,当我尝试将字符串从 fgets 复制到主数组时,它目前会导致段错误。我一直无法解决这个问题,因此无法测试我的其余代码。我将如何开始修复段错误?我已经发布了下面的代码:

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

int main(int argc, char *argv[])
{
int i=1,j,printNumber;
char **arr = (char **) malloc (100 * sizeof(char *));
char *line = (char *) malloc (80 * sizeof(char));

if (argc == 1) {
printNumber = 10;
}
else {
printNumber = atoi(argv[1]);
}

while (fgets(line,80,stdin) != NULL) {
if (line != NULL) {
line[strlen(line)-1] = '\0';
strcpy(arr[i],line); //SEGMENTATION ERROR!!!!
}
else {
free(line);
strcpy(arr[i],NULL);
}
i++;
printf("%d ",i);
}
free(arr);

for (j = i-printNumber-1; j < i-1; j++) {
printf("%s ", arr[j]);
}
printf("\n");
return 0;
}

最佳答案

您正在为 arr 分配空间,它是指向指向 char 的指针的指针,但没有在其中分配任何单独的 char * 指针arr.

由于您分配了大小为 100 * sizeof(char *)arr,因此我假设您需要 arr 中的 100 个子条目.当然:

for(i = 0; i < 100; i++)
arr[i] = malloc(80 * sizeof(char));

然后,当你释放 arr 时:

for(i = 0; i < 100; i++)
free(arr[i]);

free(arr);

请注意,最好始终检查 malloc 是否失败(NULL 的返回值)并进行处理,并将指针设置为 NULL 在释放它们一次以避免双重释放错误之后。

关于c - 打印文本文件的最后几行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54834969/

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