我试图使用它,但是当我用valgrind运行时,我有一些内存问题。
对于例子
char *serialize_file(t_file_package *pack) {
char *payLoad = malloc(numDigits(pack->file_desc)+numDigits(pack->priority)+strlen(pack->code)+2);
sprintf(payLoad, "%d#%d#%s", (uint32_t)pack->file_desc,(int16_t)pack->priority, pack->code);
char *pack = malloc(numDigits(PROCESS) + numDigits((int64_t)strlen(payLoad)) + strlen(payLoad)+2);
sprintf(pack, "%d#%d#%s",PROCESS, strlen(payLoad), payLoad);
free(payLoad);
return pack;
}
我知道asprintf的存在,但我知道为什么我不能在我的GNU ANSI C项目中使用它...我的eclipse说该功能无法识别
先谢谢你了!
答案 0 :(得分:1)
您忘记了尾随空字符'\0'
。在malloc()
次调用的参数中添加一个字节(将+2
替换为+3
),一切都应该没问题。
答案 1 :(得分:1)
你不允许空格用于字符串末尾的空字符 - 字符串需要“file_desc”中数字的空格,“优先级”中的数字,“代码”中的字符,两个“#” “字符和终端空字符。
第二次调用malloc
时存在同样的问题