簡體   English   中英

malloc之后出現意外字符

[英]Unexpected character after malloc

我有一些這樣的代碼:

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

請告訴我怎么了。

如果使用malloc請求內存,則malloc將被統一化(即可以包含隨機數據)。 如果要使其初始化為零,請使用例如calloc

這就是為什么

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

僅打印隨機數據。 您至少需要設置old[0]='\\0'; malloc調用之后。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM