0

对不起,我是新手,我正在努力解决这个问题,

我想首先分配足够的内存来容纳 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

谢谢!

4

2 回答 2

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");
}
于 2012-11-29T23:33:49.707 回答
1

整数类型的大小在字节意义上是固定的,所以不要担心,除非你的值可以超过最大整数的大小。您在调用strlen数组时遇到问题,因为它们未初始化,因此strlen将寻找可能设置或未设置的空终止字符。如果你想像这样分配 256 个字节,你最好使用sizeof string1而不是strlen(string1). 根据您的说法,最好考虑创建一个包含 3 个char[256]数组和一个整数成员的结构以满足您的需要,并将其作为非动态分配的对象处理。您的char数组已经根据空间创建,因此malloc除了在此处分配更多空间之外什么都不做。你确定这是你想要的吗?

于 2012-11-29T23:35:42.890 回答