c - 为 char * 和 int 的 sprintf 分配内存

标签 c int malloc

对不起,我是新手,我正在为此苦苦挣扎,

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

谢谢!

最佳答案

您正在将整数值打印为字符串。

创建另一个字符数组来保存整数的字符串转换,然后求和。

不要忘记您还需要一个字节来保存尾随的 NULL 字符 '\0',以终止一个字符串。阅读字符数组和字符串之间的区别(即:字符串是在数组中的某个点以 '\0' 结尾的字符数组)将是一项有值(value)的练习。

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");
}

关于c - 为 char * 和 int 的 sprintf 分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13636667/

相关文章:

c - C中的字符串操作

c - scanf仅交替工作

iphone - 如何在程序重新运行时递增整数并保存以供使用?

c - C免费的malloc的结构成员和结构

c++ - 1 字节整数数据类型

C 中将字符串与 int 连接

c - 序列堆栈: uninitialized value was created by a heap allocation

c - C 中二进制搜索的第一次和最后一次出现

c - 如何检查记录是否存在于C中的sqlite中

c - 如何在 Windows 中打印\n?