#include<string.h>
#include<stdio.h>
int main()
{
char *p;
strcpy(p,"hello world");
}
那麼,它顯示undefined behaviour
還是它指向hello世界?我見過很多使用這種類型的sytax的程序員。我知道它比一個你不知道字符串大小的數組更好。但是,在編程中使用它會很好嗎?任何人都可以解釋它?字符串和指針
#include<string.h>
#include<stdio.h>
int main()
{
char *p;
strcpy(p,"hello world");
}
那麼,它顯示undefined behaviour
還是它指向hello世界?我見過很多使用這種類型的sytax的程序員。我知道它比一個你不知道字符串大小的數組更好。但是,在編程中使用它會很好嗎?任何人都可以解釋它?字符串和指針
p未初始化並將任何內容複製到它將產生Segmentation Fault
和不可預知的結果,因爲p指向的內存中的位置未由代碼指定。
在將字符串複製到p之前,必須指定p指向的內存。
你應該使用char [Buffersize];
例如char [12];
或'char [12]'=) –
你沒有初始化p
,這樣的行爲是明確的定義。如果將p
初始化爲指向一個有足夠空間容納字符串的區域,或者將p
指定爲(不是strcpy()
)"hello world"
至p
(因此將其指向存儲文字字符串的初始化程序存儲器中的區域),或者使用strdup()
它會起作用,而不是strcpy()
。
感謝你的geeko向我介紹了新的strdup函數。 – cody
我見過很多使用這種語法的程序員 。
我對此表示懷疑。也許有一些這樣的語法,但不包含這些語義,即不是沒有'p'指向足夠容納字符串的內存區域,包括其尾部的空字節。
您發佈的代碼是完全錯誤的,可能會導致程序崩潰,而且很難想象您會經常看到類似的代碼。
您更可能看到類似以下的代碼。
int main()
{
char *p = (char*)malloc(20);
strcpy(p, "hello world");
free(p);
}
是你的權利喬納森 – cody
您不必分配和複製來獲取字符串。你可以讓編譯器爲你做所有的工作:
char p[] = "Hello world!";
它甚至會計算出適當的數組大小!
當我嘗試運行此操作時,出現段錯誤。它在運行時編譯並失敗。這我希望從一個未初始化的指針。 – ncmathsadist