代码的作用:我读取了一个二进制文件并对其进行了排序。为此,我使用了频率阵列。
更新:它确实执行了循环,但是并没有正确地写出数字...
那就是代码。我想从文件中读取后写在文件上。我将改写已经写过的东西,那是好的。问题是我在编译时没有错误,但是在运行时似乎出现了无限循环。
该文件是二进制的。我逐字节读取它,这也是我想要编写它的方式。
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位