-5
#include<stdio.h>
#include<stdlib.h>
int main()
{
char *p;
p=malloc(1);
scanf("%s",p);
printf("%s",p);
free(p);
}
該代碼只需要27個字符之後出現分段錯誤。可以有人解釋malloc(1)的這種奇怪行爲嗎?無法理解Malloc輸出
#include<stdio.h>
#include<stdlib.h>
int main()
{
char *p;
p=malloc(1);
scanf("%s",p);
printf("%s",p);
free(p);
}
該代碼只需要27個字符之後出現分段錯誤。可以有人解釋malloc(1)的這種奇怪行爲嗎?無法理解Malloc輸出
你只分配一個字節。在你的例子中的第一個字節之後的任何一點,segfault都是公平的遊戲。它恰好是你27字節。它每次運行程序的時間可能會有所不同
編輯: 如果你的意思是隻分配了一個告別讀取單個字符,改變你的功能:
scanf(" %c", p);
printf("%c", p);
領先的空間在前面在scanf上的字符說明符是欺騙scanf忽略它可能試圖分配給你的緩衝區的任何空格(如果有的話)
我根本不覺得奇怪。你期望發生什麼?你認爲'malloc(1)'做了什麼? – 2014-10-31 17:30:13
@ 1336087:即使只有一個字符是[未定義行爲](http://en.wikipedia.org/wiki/Undefined_behavior)。必須有'scanf'來添加空終止符。 – 2014-10-31 17:42:24
@FredLarson:是的,OP應該分配至少2個字節。並使用'scanf(「%1s」,p);'或'fgets()'。 – user1336087 2014-10-31 17:44:46