从C中的多个int创建String(char *)

时间:2013-03-13 17:37:21

标签: c string char

我想要做的是制作一个包含4个整数的字符串,其间有空格。就像在Java中一样:

String res = num1 + " " + num2 + " " + num3 + " " + num4;

但我无法弄清楚如何在C中做到这一点。

int numWords = 0;
int numLines = 0;
int numChars = 0;
int numBytes = strlen(string);
char *result = malloc(sizeof(char) * 10);
result += numWords; //doesnt work is there somekind of function in c to do this?

3 个答案:

答案 0 :(得分:4)

您可以使用sprintf将每个数字转换为字符串(如果需要,可以strcat将它们一个接一个地放置)。您应该跟踪字符串的长度,以确保不会溢出它。

例如:

int var = 10;
char buf[20];
sprintf(buf, "%d", var);  // buf string now holds the text 10

如果你有一套格式和数量,你不需要比这复杂得多。因此,如果您总是需要四个数字之间的一个空格,则可以使用一个sprintf和一个类似"%d %d %d %d"的格式字符串来完成所有操作(尽管这需要更大的字符数组)。


编写一个添加到现有字符串的小实用程序函数很容易,例如:

int add_to_string(char *buf, size_t sz, int num)
{
   char tmp[20];
   sprintf(tmp, " %d", num);

   size_t len = strlen(tmp) + strlen(buf) + 1; 
   if (len > sz)
      return -1;

   strcat(buf, tmp);
   return 0;
}

你会用以下内容打电话:

char buf[100];
sprintf(buf, "%d", 42);
add_to_string(buf, sizeof(buf), 9);
add_to_string(buf, sizeof(buf), 15);
add_to_string(buf, sizeof(buf), 8492);
add_to_string(buf, sizeof(buf), 35);
printf("String is '%s'\n", buf);

Output:
String is '42 9 15 8492 35'

答案 1 :(得分:1)

#define FMT_STR "%d %d %d %d"

char *make_string(int num1, int num2, int num3, int num4)
{
    char *res;
    int len;

    // compute the length
    len = snprintf(NULL, 0, FMT_STR, num1, num2, num3, num4) + 1;
    // allocate and use the buffer
    res = malloc(len);
    snprintf(res, len, FMT_STR, num1, num2, num3, num4);

    return res;
}

答案 2 :(得分:1)

使用sprintf

char target[SOME_SIZE];
...
sprintf(target, "%d %d %d %d", num1, num2, num3, num4);

你必须确保你的目标足够大,以容纳所有四个数字的字符串表示,加上三个空格,加上任何符号,加上0终结符。它需要3.3位来表示十进制数字,因此32位int最多可以包含10位十进制数字。

如果要动态分配目标缓冲区,则需要执行类似

的操作
size_t maxdigits = (size_t) ceil((sizeof num1 * CHAR_BIT) / 3.3);
char *target = malloc( sizeof *target * ((4 * maxdigits) + 3 + 4 + 1)); 

空格为+3,任何符号字符为+4(+ / -),0终止符为+1。