我想要做的是制作一个包含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?
答案 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。