我有一些这样的代码:
............
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: %sn",c);
if(fl == 0) {
fprintf(f,"old1: %sn",old);
old = malloc(strlen(c) + 3 );
fprintf(f,"old2: %sn",old);
strcat(old,"=:");
strcat(old,c);
fprintf(f,"old3: %sn",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
为其附加一些文本
但是当我打印它时,我得到了一个意想不到的字符(▒▒X▒8)发出malloc
:
old1: (null)
old2: ▒▒X▒8
old3: ▒▒X▒8=:C1
我用free
清除old
变量后使用,但是我的程序永远挂起,我必须强制kill
它
请告诉我有什么问题.
如果你用 malloc
请求内存,它是单位化的(即可以包含随机数据)。使用例如 calloc
是否要将其初始化为零。
这就是为什么
old = malloc(strlen(c) + 3 );
fprintf(f,"old2: %sn",old);
仅打印随机数据。您至少需要在malloc
调用后设置old[0]=' ';
。