gpt4 book ai didi

有人可以解释其中的段错误吗?

转载 作者:太空宇宙 更新时间:2023-11-04 08:15:12 24 4
gpt4 key购买 nike

我写了一段代码,它读取格式为 foo.txt 的文本文件:

1
2
3
4

它存储最后一个数字并将其递增并写回。这是我存储最后一个数字的部分,代码的下一部分将把数字写入文件。该文件由 ./readfile 100 foo.txt 调用,其中 100 是它必须递增最后一个数字的次数。

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

int main(int argc, char *argv[]) {
FILE *fp;
char ch[100];
int i = 0;
int j = 0;
int count = atoi(argv[1]);

while (count != 0) {
fp = fopen(argv[2], "r");
while (fp) {
ch[i] = fgetc(fp);
i++;
j = i;
printf("%d", j);
}
fclose(fp);
count--;
}
return 0;
}

最佳答案

你的问题是:

while (fp)

A FILE* 对于 bool 测试来说,只是另一个指针。因此,只要它成功打开,该测试就会通过。您一直一次读取字符,存储到数组的连续元素中,直到溢出,并最终完全写入未分配的内存(或者巧合地踩踏重要的东西并以其他方式导致崩溃)。

你真的想要这样的东西:

    // Must read into int; EOF itself is not a char value
int inchar;
// Read and test for EOF
while((inchar = fgetc(fp)) != EOF)
{
ch[i] = inchar; // Store
i++;
printf("%d", inchar); // Print raw value returned by fgetc
}

关于有人可以解释其中的段错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36167892/

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