使用sprintf和char *

时间:2012-12-09 18:19:28

标签: c serialization ansi printf

我试图使用它,但是当我用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说该功能无法识别

先谢谢你了!

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

你不允许空格用于字符串末尾的空字符 - 字符串需要“file_desc”中数字的空格,“优先级”中的数字,“代码”中的字符,两个“#” “字符终端空字符。

第二次调用malloc

时存在同样的问题