簡體   English   中英

字符串和指針

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM