malloc之后的意外字符

时间:2016-02-01 10:06:20

标签: c

我有一些类似的代码:

        ............                    
        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

请告诉我有什么不对。

1 个答案:

答案 0 :(得分:2)

如果您使用malloc请求内存,则会将其整合(即可以包含 随机数据)。 使用例如calloc如果您希望将其初始化为零。

这就是

的原因
           old = malloc(strlen(c) + 3 );
           fprintf(f,"old2: %s\n",old);

仅打印随机数据。 old[0]='\0';来电后,您至少需要设置malloc