在一个为int的字符串中添加一个前缀

时间:2018-09-11 06:02:22

标签: c string char int

有没有我可以使用的函数,可以将类似int num = 12;的内容转换为字符串。

基本上,我有一个存储字符串的循环。该字符串的前缀必须为int numnum每次循环进行一次迭代时都会不断增加

我想为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++;
}

2 个答案:

答案 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总是从目标缓冲区的第一个字符开始覆盖;呼叫应该是strcpystrcatstrcat

答案 1 :(得分:0)

sprintf(buffer,“%d。%s”,num ++,str);