我试图使用这个,但当我运行它与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的存在,但我不知道为什么我不能在我的GNUANSIC项目中使用它…我的eclipse说那个函数不能被识别
先谢谢你!
2条答案
按热度按时间js81xvg61#
你不允许空字符在字符串的结尾-字符串需要空间的数字在“文件_desc”,数字在“优先级”,字符在“代码”,两个“#”字符和终端空字符.
对malloc的第二次调用也存在同样的问题
yc0p9oo02#
您忘记了尾随的空字符
'\0'
。在malloc()
调用的参数中再添加一个字节(将+2
替换为+3
),一切都应该正常。