2017-01-14 16 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)); 

하지만이 결과를 얻을 내가 (여기 발은 42 동일) 이유를 이해하지 않습니다

��7s�test42 

(I 사용 이 게시물 How do I concatenate const/literal strings in C?와이 하나 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을 사용하거나 memset을 사용하여 str에 0을 넣을 수 있습니다.

편집 : 실제로는 str의 첫 번째 바이트로 \ 0을 입력하면됩니다. 실제로 strcat은 대상 문자열에서 \ 0 문자를 먼저 찾고 두 번째 문자열을 추가합니다.