【发布时间】:2014-04-02 08:07:56
【问题描述】:
今天早上我对 C 的行为感到惊讶。(真的让我感到惊讶。)
如果我写这样的代码:
char *txt;
strncpy(txt,"hello",4);
printf("%s\n",txt);
然后我知道它会给出分段错误,因为我没有为'txt'指针分配内存。好的....现在看到这段代码:
char *txt = (char *) calloc(0,sizeof(char ));
strncpy(txt,"hello",4);
printf("%s\n",txt);
我仍然为 'txt' 分配了 0 个字节,但我只是惊讶为什么它没有给出分段错误?,而不是给出分段错误,它给出了正确的答案“地狱”。
谁能解释一下 C 的这种行为?
【问题讨论】:
-
尝试致电
free(txt)看看会发生什么... -
调用 free(txt) 时一切正常,我的意思是没有错误出现,它给出了正确的答案。 @pat