以下兩個代碼類似,但第一個代碼具有結構,第二個代碼沒有。*將char轉換爲main並將* char轉換爲struct
爲什麼這段代碼有效(沒有警告)?
#include <stdio.h>
#include <string.h>
struct prova
{
char *stringa;
};
int main()
{
struct prova p;
strcpy (p.stringa, "example\0");
printf("%s\n", p.stringa);
return 0;
}
但是下面的代碼不起作用?
Segmentation fault (core dumped)
有了這樣的警告:
code.c: In function ‘main’: code.c:8:9: warning: ‘stringa’ is used uninitialized in this function [-Wuninitialized] strcpy (stringa, "example\0");
#include <stdio.h>
#include <string.h>
int main()
{
char *stringa;
strcpy (stringa, "example\0");
printf("%s\n", stringa);
return 0;
}
謝謝!
你沒有爲'stringa'分配內存。它可能工作與否,但仍然是錯誤的。嘗試在第一個例子中放大一些 – m0skit0
是的,我知道這是錯誤的,但我不明白爲什麼第一個代碼有效! (謝謝你的回答!) –
由於內部關於如何分配內存。第一個例子可能比第二個分配更多的內存,或者以不同的方式分配內存。這是編譯器特定的,可能使用不同的編譯器/平臺會產生不同的結果。 – m0skit0