[英]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.