gpt4 book ai didi

c - fseek 在运行时创建无限循环

转载 作者:行者123 更新时间:2023-11-30 19:44:33 25 4
gpt4 key购买 nike

代码的作用:我读取一个二进制文件并对其进行排序。我使用频率阵列来做到这一点。更新:它确实执行了循环,但它没有正确地写入数字......

这就是代码。我想在读取文件后写入文件。我会在已经写好的内容上加上上面的内容,没关系。问题是我在编译时没有错误,但在运行时似乎有一个无限循环。该文件是二进制的。我逐字节读取它,这也是我想要的写入方式。

while(fread(readChar, sizeof(readChar)/2, 1, inFile)){
bit = atoi(readChar);
array[bit] = array[bit] + 1;
}

fseek(inFile, 0, SEEK_SET);

for( i = 0; i < 256; i++)
while(array[i] > 0){
writeChar[0] = array[i]; //do I correctly convert int to char?
fwite(writeChar, sizeof(readChar)/2, 1, inFile);
array[i] = array[i] -1;
}

inFile 文件声明为:

FILE* inFile = fopen (readFile, "rb+");

它从文件中读取,但不写入!

最佳答案

未定义的行为:

fread() 用于读取数据的二进制表示形式。 atoi() 采用数据的文本表示:一个字符串(指向以 ' 结尾的 char 数组的指针\0'

除非读入 readChar 的数据的其中一个字节设置为 0,否则调用 atoi() 可能会访问 readChar 外部的数据。

fread(readChar, sizeof(readChar)/2, 1, inFile);
bit = atoi(readChar);

编码不是“一点一点”读取数据 @Jens 评论:“最小单位是字节。”这至少是 8 位。

关于c - fseek 在运行时创建无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27960071/

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