对不起,我是个新手,我正在努力解决这个问题,
我想首先分配足够的内存来容纳3个字符串和一个整数
char *final;
char string1[256];
char string2[256];
char string3[256];
int myNum, mySize= 0;
// populate values
...
mySize += strlen(string1) + strlen(string2) + strlen(string3);
final = malloc(mySize);
sprintf(final, "%s = %s{%s:%d}", string1, string2, string3, myNum);
整数可能大到90,000,所以我怎么知道为整数分配多少?对不起,如果很简单,
我刚刚意识到我需要为空指针分配+1,并为=,{等符号
分配谢谢!
答案 0 :(得分:2)
您正在将整数值打印为字符串。
创建另一个字符数组以保存整数的字符串转换,然后求和。
不要忘记您还需要一个字节来保存尾随的NULL字符'\0'
,以终止字符串。阅读字符数组和字符串之间的区别(即:字符串是在数组中的某个点以'\0'
结尾的字符数组)是一项值得的练习。
char *final;
char string1[256];
char string2[256];
char string3[256];
char numberString[256];
int myNum, mySize= 0;
// populate values
...
sprintf(numberString,"%d",myNum);
mySize = strlen(string1) + strlen(string2) + strlen(string3) + strlen(numberString) + 1;
final = malloc(mySize*sizeof(char)); //The sizeof(char) is probably overkill, but safe practise
if(final) // check for null in case malloc failed above
{
sprintf(final, "%s = %s{%s:%d}", string1, string2, string3, myNum);
} else {
printf("MEMORY ERROR");
}
答案 1 :(得分:1)
类型整数的大小在字节意义上是固定的,所以除非你的值超过最大整数的大小,否则不要担心。您在数组上调用strlen
时遇到问题,因为它们未初始化,因此strlen
将查找可能设置也可能未设置的空终止字符。如果你想像这样分配256个字节,最好使用sizeof string1
而不是strlen(string1)
。根据您的说法,最好考虑创建一个包含3个char[256]
数组和一个整数成员的结构来满足您的需求,并将其作为非动态分配的对象来处理。您的char
数组已根据空间创建,因此malloc
除了在此处分配更多空间外什么都不做。你确定这是你想要的吗?