使用sprintf和char *

kjthegm6  于 2023-03-22  发布在  其他
关注(0)|答案(2)|浏览(101)

我试图使用这个,但当我运行它与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说那个函数不能被识别
先谢谢你!

js81xvg6

js81xvg61#

你不允许空字符在字符串的结尾-字符串需要空间的数字在“文件_desc”,数字在“优先级”,字符在“代码”,两个“#”字符终端空字符.
对malloc的第二次调用也存在同样的问题

yc0p9oo0

yc0p9oo02#

您忘记了尾随的空字符'\0'。在malloc()调用的参数中再添加一个字节(将+2替换为+3),一切都应该正常。

相关问题