2013-11-17 4 views
-2

Я пытаюсь написать простую строку в файл с C с fwrite().fwrite не пишет правильно

Когда я определяю простую строку, как:

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); 

} 

Есть ли у кого-нибудь идеи, почему? Благодаря

+0

Какие строки? И как вы помещаете значения в 'str'? – nhgrif

+3

'char * str []' - массив указателей. Наверное, не то, что вы намеревались? – Roddy

+0

это мой 'sprintf' func: – Isaac

ответ

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(); 
} 
+0

Я подтвердил, что именно по этой причине его код был сломан, хотя он не признает этого и продолжает настаивать на том, что его собственные изменения хороши. –

Смежные вопросы