有没有我可以使用的函数,可以将类似int num = 12;
的内容转换为字符串。
基本上,我有一个存储字符串的循环。该字符串的前缀必须为int num
。 num
每次循环进行一次迭代时都会不断增加
我想为hello world
的原始字符串添加前缀,以便输出看起来像12. hello world
。
char *original = "Hello world";
char *dot_space = ". ";
int num = 0;
while (num < 200) {
char *num_string = ""; // Some how I convert the num to a string?
char *new_string = malloc(sizeof(char) * strlen(original) + strlen(num_string) + strlen(prefix) + 1;
strcpy(new_string, num_string);
strcpy(new_string, prefix);
strcpy(new_string, original);
printf("%s\n", new_string);
num++;
}
答案 0 :(得分:1)
您将使用sprintf
来创建串联的字符串。当然,诀窍是知道数字的长度。好吧,我们可以使用本地数组,然后将其复制到最终字符串中。
类似
// reserve 4 characters for each octet in the `int`
char num_string[sizeof num * CHAR_BIT / 2];
// sprintf returns the length of the string!
int num_len = sprintf(num_string, "%d", i);
// size of char is exactly 1
char *new_string = malloc(strlen(original) + strlen(prefix) + num_len + 1);
// then concatenate all with one sprintf
sprintf(new_string, "%s%s%s", num_string, prefix, original);
当然,如果您有幸使用Glibc并说了Linux;或BSD,并且不必随处编写便携式文件,您可以只使用asprintf
:
// must be before the include
#define _GNU_SOURCE
#include <stdio.h>
char *new_string;
asprintf(&new_string, "%d%s%s", i, prefix, original);
这对应于上面的4行。
请注意,您最初使用strcpy
x3的方法也会失败; strcpy
总是从目标缓冲区的第一个字符开始覆盖;呼叫应该是strcpy
,strcat
,strcat
。
答案 1 :(得分:0)
sprintf(buffer,“%d。%s”,num ++,str);