我是C新手,請和我一起裸照。據我所知,下面的代碼,因爲它試圖寫入內存的一部分,其中q
點(一些隨機地址),這部分內存是不允許通過給定的過程寫返回分段錯誤:爲什麼聲明指針指向未知內存,而定義不是?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
char* p = "Hello";
char* q;
strcpy(q, p);
printf("%s\n", q);
}
我也理解,它可以通過動態分配的內存適量指向q
這個記憶很容易固定,所以p
內容可以被安全地複製到q
:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
char* p = "Hello";
char* q = (char*)malloc(6*sizeof(char));
strcpy(q, p);
printf("%s\n", q);
}
但是,爲什麼下面的例子是工作?
#include <stdio.h>
int main(){
char* p = "Hello";
printf("%s\n", p);
}
是不是char* p = "Hello";
還指着這是不允許的給出過程寫一些未知的記憶?
@ user3121023哦,那是學者的錯誤感謝。我刪除了第二個問題不要混淆。 –
投票給我的人請註明原因,這樣我就可以改善這個問題。謝謝 –
由於[@Xaver](http://stackoverflow.com/a/38485137/2410359)回覆了刪除的部分帖子,帖子現在更加令人困惑。建議把它帶回禮服。 – chux