fwrite()未将任何内容写入文件-C

fwrite()未将任何内容写入文件-C,c,encoding,bit-manipulation,binaryfiles,fwrite,C,Encoding,Bit Manipulation,Binaryfiles,Fwrite,我目前正在编写一个哈夫曼代码来压缩和解压缩一个文件。我目前正处于将哈夫曼树中每个字符的“路径”转换为int并将其写入二进制文件的阶段。这就是我得到的: int ConversionToBinary ( FILE *binaryFile, char *string, int *currentBit, int *bitCounter ) { int x; int stringLength; stringLength = CalculateStringLength ( stri

我目前正在编写一个哈夫曼代码来压缩和解压缩一个文件。我目前正处于将哈夫曼树中每个字符的“路径”转换为int并将其写入二进制文件的阶段。这就是我得到的:

int ConversionToBinary ( FILE *binaryFile, char *string, int *currentBit, int *bitCounter ) {
    int x;
    int stringLength;
    stringLength = CalculateStringLength ( string );
    short int i;
    for ( i = 0; i < stringLength; i++ ) {
        x = ConversionToNumber ( string [ i ] );
        *currentBit = x | 1 << *contadorDeBits;
        *bitCounter++;
        if  ( *bitCounter == MAX_NUMBER_OF_BITS ) {
            fwrite ( currentBit, 1, sizeof ( int ), binaryFile );
            *currentBit = 0;
            *bitCounter = 0;
        }
    }
}
如您所见,我将所有相关数据存储在一个哈希表中,以便从中轻松检索

问题是,当我调用ConversionToBinary时,它不会写任何东西,我不知道为什么会这样。我已经检查过是否满足条件*(bitCounter==MAX_NUMBER_OF_BITS),但逻辑上应该满足,因此即使实际转换错误,至少它应该在我的文件中写入一些内容,但它没有

我现在已经没有主意了,我需要一些帮助

我在检查为什么会这样 手术照常进行。如果我没有弄错的话 必须与运算符优先级有关。根据,运营商*和 ++具有相同的优先级,并且从右开始计算 向左。所以当我这样做的时候:
*bitCounter++
为了增加所述值,我将其内存地址设置为一个块 再远一点,所以当我询问价值时,它向我展示了价值 存储在所述地址中。这是我犯的错误吗 较少的 –影灵


这几乎是正确的,除了
*bitCounter++
产生存储在地址上的值,与增量i之前一样。E在第一个循环周期的原始
位计数器处,在第二个循环周期的下一个地址处,依此类推。

您是否使用过调试器?不我建议您现在就开始使用它。我不知道如何使用调试器,因此目前这对我来说不是一个很好的解决方案。
fwrite()
返回一个结果,告诉您它编写了多少项。您正在悄悄地放弃该结果。@KeithT那么,您建议我如何检查
fwrite()
是否正在编写?我应该把
fwrite()
的结果赋给一个变量,然后检查它的结果吗?@JonathanLeffer我正在检查为什么这个操作会这样做。如果我没有弄错的话,它必须和操作符的优先级有关。根据,运算符*和++具有相同的优先级,并且从右向左求值。因此,当我这样做时:
*bitCounter++
,我没有增加所述值,而是将其内存地址设置在一个块之外,因此当我询问值时,它会显示存储在所述地址中的值。这是我或多或少犯下的错误吗?
currentBit = bitCounter = 0;
EmptyString ( string );
while ( ( character = fgetc ( textFile ) ) != EOF ) {
    auxElement = SearchInHashTable ( HashTable, character );
    strcpy ( string, auxElement -> route );
    ConversionToBinary ( binaryFile, string, &currentBit, &bitCounter );
    EmptyString ( string );
}