将 int 转换为字符串并连接结果

标签 c string int string-conversion

我尝试将字符串与转换为字符串的整数连接起来,并将结果写入文件。

这是我的代码(简化版):

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? 和这个 How to convert integer to string in C? )

最佳答案

你得到垃圾输出的原因是因为你给 strcat 的是垃圾。事实上,您为 str 分配了 64 个字节,但您没有初始化它,所以您不知道它包含哪些字节。您可以使用 calloc 而不是 malloc 或使用 memset 将 0 放入 str

编辑:事实上,您只需要将\0 作为 str 的第一个字节。实际上,strcat 首先在目标字符串中查找\0 字符,然后从那里添加第二个字符串

关于将 int 转换为字符串并连接结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41656273/

相关文章:

c - Eclipse stdio.h 错误

c++ - 安装 GCC : fatal error: gnu/stubs-32. h: 没有那个文件或目录

c - 考虑到编译库,在哪里定义 extern 声明变量

c - 在C中,如何将存储在变量中的多单词字符串分解为数组,每个单词保存一个数组值

c++ - 随机字符串生成器段错误

c - 'N'字符出现在字符串的末尾

c++ - 在 C++ 中声明 int 对象

CUDA 三重循环

C++ 我可以使用 string::at 分配一个 int 吗?

python - 如何构造一个数字之间有空格的整数?