0

我想做的是制作一个由 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?
4

3 回答 3

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'
于 2013-03-13T17:39:42.400 回答
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;
}
于 2013-03-13T17:45:07.430 回答
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。

于 2013-03-13T17:55:40.993 回答