【问题标题】:Adding a prefix to a string which is an int将前缀添加到一个 int 字符串
【发布时间】:2018-09-11 06:02:21
【问题描述】:

有没有我可以使用的函数将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++;
}

【问题讨论】:

  • 你知道sprintf()吗?
  • 你的意思是你的前缀是转换后的数字还是有额外的前缀?否则num_stringprefix 应该是一样的
  • 要添加一个字符串到另一个,你需要strcatstrcpy只能复制第一个。

标签: c string char int


【解决方案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

【讨论】:

  • 如果你有幸使用了 C++,只需轻轻一挥,这一切就会消失。
【解决方案2】:

sprintf(buffer, "%d.%s", num++, str);

【讨论】:

  • 我不会说这非常有帮助。这里唯一有意义的是 OP 想知道一个实际进行转换,而不是如何在 C 中进行转换。
  • @Roflcopter4 如果 OP 询问“是否有将整数转换为字符串的函数”,我们可以假设其中还包括如何使用它。
猜你喜欢
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-07
相关资源
最近更新 更多