Преобразовать 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
(Я использовал этот пост Как объединить константные / литеральные строки в C? И этот Как преобразовать целое число в строку в C?)
1 ответ
Причина, по которой вы получаете искаженный вывод, заключается в том, что вы даете strcat
это мусор. В самом деле, вы Malloc'ed 64 байта для str
но вы не инициализировали его, поэтому вы не знаете, какие байты он содержит. Вы можете использовать calloc
вместо malloc или использовать memset
поставить 0 в str
,
РЕДАКТИРОВАТЬ: На самом деле, вам нужно только поставить \0 в качестве первого байта str
, В самом деле, strcat
сначала ищет символ \0 в строке назначения, оттуда добавляет вторую строку