fwrite写不正确

时间:2013-11-17 22:43:21

标签: c windows fwrite

我一直在尝试使用fwrite()在C语言中写一个简单的字符串。

当我将一个简单的字符串定义为:

char str[]="Hello World!";

并将其写为文件:

fwrite(str, sizeof(char), sizeof(str), fp);

一切似乎都很好。

但是当我使用sprintf_s创建自定义字符串时,我得到的输出文件是:

  

﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾畒湮湩湁祬驱浉条⹥硥⁥汤椠杭〰⸱灪㩧爠

虽然printf func会正确打印字符串

完整代码:

#define MAX_ELEMENT_LENGTH 512


void GenerateResultLine(char *resultLineBuffer, int maxLength,
                            const char *result) {
    const char * TEMPLATE= "Running Result: %s";
    sprintf_s(resultLineBuffer, maxLength, TEMPLATE, result);
}


void PrintResultToFile(char* exitCode,  FILE* resultFile) {
    char    resultLine[ MAX_ELEMENT_LENGTH ];

    GenerateResultLine(resultLine, MAX_ELEMENT_LENGTH, exitCode);
    printf("LINE: %s\n",resultLine);


    fwrite(resultLine, sizeof(char), sizeof(resultLine), resultFile);

}

有谁知道为什么? 感谢

1 个答案:

答案 0 :(得分:2)

代码正在将未初始化的数据写入文件

// Code writes entire buffer to the file,
// even though only the leading bytes are defined via a previous sprintf_s()
fwrite(resultLine, sizeof(char), sizeof(resultLine), resultFile);

// Instead
size_t n = strlen(resultLine);
n++; // If the final `\0` is desired.
if (n != fwrite(resultLine, sizeof(char), n, resultFile)) {
  handle_error();
}