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

那就是代码。我想从文件中读取后写在文件上。我将改写已经写过的东西,那是好的。问题是我在编译时没有错误,但是在运行时似乎出现了无限循环。
该文件是二进制的。我逐字节读取它,这也是我想要编写它的方式。

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位

10-08 05:23