2017-01-14 2 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 

(я использовал этот пост 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

'str' в' parse_val() 'выделена память, но вы не можете' concat', не инициализируя эту память. –

+0

Ницца, спасибо @BLUEPIXY. Хорошо работает – Eraseth

ответ

2

Причина, по которой вы получаете вывоз мусора, заключается в том, что то, что вы даете strcat, является мусором. В самом деле, вы malloc'ed 64 байта для str, но вы не инициализировали его, поэтому вы не знаете, какие байты он содержит. Вы можете использовать calloc вместо malloc или использовать memset, чтобы положить 0 в str.

EDIT: На самом деле вам нужно поставить \ 0 в качестве первого байта str. Действительно, strcat сначала ищет символ \ 0 в целевой строке, оттуда он добавляет вторую строку

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