[英]Strings and pointers
#include<string.h>
#include<stdio.h>
int main()
{
char *p;
strcpy(p,"hello world");
}
那么,它是顯示undefined behaviour
還是指向你好世界? 我見過很多程序員使用這種語法。我知道它比你不知道字符串大小的數組更好。但是在編程中使用它好么。誰能解釋一下?
這是未定義的行為,因為p
未初始化。 我不認為你真的看到很多人這樣做......
strcopy
需要一個足夠長的緩沖區來復制第二個參數的內容。 您的示例是故意設計的,但在實際代碼中,您需要知道source_string
的大小才能分配緩沖區。
您沒有初始化p
,因此行為是明確未定義的。 如果將p
初始化為指向一個有足夠空間來保存字符串的區域,或者將(不是strcpy()
) "hello world"
分配給p
(從而將其指向已初始化程序 memory 中存儲文字字符串的區域) ,或者您使用strdup()
而不是strcpy()
,它將起作用。
我見過很多程序員使用這種語法。
我對此表示懷疑。 也許有一些語法,但不是這些語義,即不是沒有'p'指向memory的區域,該區域足夠大以容納字符串,包括其尾隨null字節。
您發布的代碼是完全錯誤的,可能會使您的程序崩潰,很難想象您經常看到這樣的代碼。
您更有可能看到如下代碼。
int main()
{
char *p = (char*)malloc(20);
strcpy(p, "hello world");
free(p);
}
您不必分配和復制來獲取字符串。 您可以讓編譯器為您完成所有工作:
char p[] = "Hello world!";
它甚至會計算數組的正確大小!
p 未初始化並且向其復制任何內容將產生Segmentation Fault
和不可預測的結果,因為代碼未指定 p 指向的 memory 中的位置。
在將字符串復制到 p 之前,您必須指定 p 指向的 memory。
你應該使用char [Buffersize];
例如char [12];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.