[英]C - strcpy pointer
我想問一下strcpy。 我在這里有問題。 這是我的代碼:
char *string1 = "Sentence 1";
char *string2 = "A";
strcpy(string1, string2);
我認為我的代碼沒有問題。 string1和string2中第一個字符的地址發送到函數strcpy
。 這段代碼應該沒有問題,對吧? 任何人都可以幫助我解決這個問題或向我解釋。
謝謝。
有一個問題-每個指針都指向您無法寫入的內存; 它們指向編譯器構建到您的應用程序中的常量。
您需要在可寫內存中分配空間(例如,通過char string1[<size>];
進行堆棧char string1[<size>];
或者通過char *string1 = malloc(<size>);
進行堆)。 確保替換為所需的緩沖區空間,並至少為NULL終止添加一個額外的字節。 如果您使用malloc()
,請確保稍后再使用free()
!
這給出了不確定的行為。 由於歷史原因(字符串文字不是const
),編譯器可能允許這樣做,但是您基本上是在試圖覆蓋您在許多平台上根本無法修改的數據。
從linux手冊頁:
char * strcpy(char * dest,const char * src); strcpy()函數將src指向的字符串(包括終止的空字節('\\ 0'))復制到dest指向的緩沖區。 字符串不能重疊,並且目標字符串dest必須足夠大才能接收副本。
* dest指針存在問題,因為它指向的是字符串文字而不是分配的可修改內存。 嘗試將字符串1定義為char string1[BUFFER_LENGTH];
或使用malloc()
動態分配它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.