我有一些类似的代码:
............
char *old = NULL ;
char *new = NULL;
char *b1 = malloc(strlen(b) + 1);
memcpy(b1,b,strlen(b) + 1);
char *c;
for(c = strtok_r(b1,"=",&saveptr3) ; c != NULL ; c = strtok_r(NULL,"=",&saveptr3)){
fprintf(f,"c: %s\n",c);
if(fl == 0) {
fprintf(f,"old1: %s\n",old);
old = malloc(strlen(c) + 3 );
fprintf(f,"old2: %s\n",old);
strcat(old,"=:");
strcat(old,c);
fprintf(f,"old3: %s\n",old);
fl++;
} else {
new = malloc(strlen(c) + 1);
strcat(new,"=");
strcat(new,c);
if(!sql) {
sql = malloc(strlen(first_part) + 1);
sql = str_replace(first_part,old,new);
} else {
sql = str_replace(sql,old,new);
}
}
.....................
您可以看到,我有old
变量,malloc
并使用strcat
向其附加一些文字
但是当我打印它时,在发出malloc
之后我得到一个意想不到的字符(▒▒X▒8):
old1: (null)
old2: ▒▒X▒8
old3: ▒▒X▒8=:C1
我在使用后使用free
清除old
变量,但我的程序永远挂起,我必须强制kill
请告诉我有什么不对。
答案 0 :(得分:2)
如果您使用malloc
请求内存,则会将其整合(即可以包含
随机数据)。
使用例如calloc
如果您希望将其初始化为零。
这就是
的原因 old = malloc(strlen(c) + 3 );
fprintf(f,"old2: %s\n",old);
仅打印随机数据。 old[0]='\0';
来电后,您至少需要设置malloc
。