0

stdout をファイルに変更し、何かを書き込んでから、再実行して画面に戻そうとしています。私のコードは次のとおりです。

FILE *stream ;
char * file_name = "LRA_SOLVER";
char * file_ext = ".txt";
char file_number [3] = {0};
itoa (lra_solver_couter++,file_number,10);
char* file_full_name = (char*)calloc(strlen(file_number)+10+4,sizeof(char));
strcpy(file_full_name, file_name);
strcat(file_full_name, file_number);
strcat(file_full_name, file_ext); 
if((stream = freopen(file_full_name, "w", stdout)) == NULL)
    exit(-1);
print(); // a lot of printing into the file.
stream = freopen("CON", "w", stdout); // change it back
free(file_full_name);

しかし、ヒープの破損が検出されました... lra_solver_couter は大きくありません (通常は 0-20)。私は何を間違っていますか?

4

1 に答える 1

1

の必要な長さを計算するときに、末尾の '\0' を忘れfile_full_nameましstrlen(file_number)+10+4た。`\0'に追加します。10 == strlen(file_name)4 == strlen(file_ext)1

于 2013-07-24T12:09:28.257 に答える