问题是我不知道字符串将持续多长时间,所以我不知道我应该为我的数据分配多少...
char *Data = malloc(1024*1024); //???????
sprintf(Data, "%s %s", Data1, Data2);
Run Code Online (Sandbox Code Playgroud)
Data1和Data2的大小不时变化....从非常非常长到非常小我想知道是否有使用sprintf而不分配内存或其他东西,因为分配的内存有时可能很小..
谢谢
许多C运行时库(例如,GNU的glibc的和FreeBSD(以及NetBSD的和OpenBSD的和OS X的)libc中)提供asprintf,它结合malloc并sprintf成一个单一的电话.
char *Data = NULL;
asprintf(&data, "%s %s", Data1, Data2);
Run Code Online (Sandbox Code Playgroud)
假设返回值表示成功,则为字符串动态分配了足够的空间,free不再使用时应该这样做.
由于data1和data2似乎是字符串,因此只需使用strlen()并仅分配实际需要的内存量.
char *data = malloc(sizeof(char) * (strlen(data1) + strlen(data2) + 1));
Run Code Online (Sandbox Code Playgroud)