为sprintf问题分配内存?

kil*_*ode 2 c

问题是我不知道字符串将持续多长时间,所以我不知道我应该为我的数据分配多少...

char *Data = malloc(1024*1024);  //???????
sprintf(Data, "%s %s", Data1, Data2);
Run Code Online (Sandbox Code Playgroud)

Data1和Data2的大小不时变化....从非常非常长到非常小我想知道是否有使用sprintf而不分配内存或其他东西,因为分配的内存有时可能很小..

谢谢

eph*_*ent 6

许多C运行时库(例如,GNU的glibc的和FreeBSD(以及NetBSD的和OpenBSD的和OS X的)libc中)提供asprintf,它结合mallocsprintf成一个单一的电话.

char *Data = NULL;
asprintf(&data, "%s %s", Data1, Data2);
Run Code Online (Sandbox Code Playgroud)

假设返回值表示成功,则为字符串动态分配了足够的空间,free不再使用时应该这样做.

  • 好吧,它不会出现在"标准库"中,即使它与目标平台上的标准库在同一个包中提供.更好的是"许多C运行时库带有非标准的"asprintf",它结合了......"/ (3认同)

Blu*_*Dog 5

由于data1和data2似乎是字符串,因此只需使用strlen()并仅分配实际需要的内存量.

char *data = malloc(sizeof(char) * (strlen(data1) + strlen(data2) + 1));
Run Code Online (Sandbox Code Playgroud)