2017-01-14 15 views
0

文字列を整数に連結して文字列に変換し、結果をファイルに書き込もうとします。intを文字列に変換して結果を連結します

は(簡体字)私のコードがあります:

char * convert_int_string(int val) 
{ 
    char * str = malloc(sizeof(char)*64); 
    sprintf(str,"%d",val); 
    return str; 
} 

char * parse_val(int val){ 
    char * str = malloc(sizeof(char)*64); 
    char * str2 = convert_int_string(val); 
    strcat(str, "test"); 
    strcat(str,str2); 
    free(str2); 
    return str; 
} 

fprintf(my_file, "%s\n", parse_val(42)); 

しかし、私はこの結果を取得し、私は(ここでvalが42に等しい)理由を理解していない:

��7s�test42 

(私が使用しましたこのポストHow do I concatenate const/literal strings in C?とこれ1 How to convert integer to string in C?

+4

'strcat(str、" test ");' - > 'strcpy(str、" test ");' : 'malloc'によって返されたメモリチャンクは初期化されていません。 – BLUEPIXY

+1

'parse_val()'の 'str'にはメモリが割り当てられていますが、そのメモリを初期化せずに' concat'することはできません。 –

+0

ニース、ありがとう@BLUEPIXY。 'strcat(str、" test ");の中では – Eraseth

答えて

2

あなたがstrcatに与えたものはゴミだからです。確かに、あなたはstrのために64バイトをmallocしましたが、あなたはそれを初期化していなかったので、あなたはどのバイトが入っているのか分かりません。 mallocではなくcallocを使用するか、strに0を入れるにはmemsetを使用します。

編集:実際には、strの最初のバイトに\ 0を入れるだけです。実際には、strcatは最初に宛先文字列の\ 0文字を探し、そこから2番目の文字列を追加します。

関連する問題