[英]String copy(strcpy)
我有以下代碼。
#include <string.h>
#include <stdio.h>
int main()
{
char * l;
*l = 'c';
*(l+1) = 'g';
*(l+2) = '\0';
char *second;
strcpy(second, l);
printf("string: %s\n", second);
}
我運行時說:
輸出顯示“分段錯誤”。...有任何建議嗎??
謝謝
l
是未初始化的指針; 您不能取消引用它。 您應該分配足夠的空間來寫入其內容(靜態(1)或動態(2))。
char l[3]; /* (1) */
#include <stdlib.h>
char *l = malloc(3); /* (2) */
與strcpy
相同的錯誤: second
是統一指針,您不能寫入它。
您將學到輕視Segmentation Fault
錯誤...
當您嘗試訪問不是您自己的內存時,通常會調用它。 最常見的情況是當您嘗試訪問超出范圍的數組索引時。
char *l
只是創建一個指向char的指針。 您想要的是一個字符串,在C中將其定義為字符數組。 因此,當您嘗試訪問l
指向的內存中的下一個位置(可能只是垃圾)時,您將訪問不屬於您的內存,因此Segmentation Fault
您可以使用malloc獲取內存,也可以將指針指向一個已經存在的變量。
char word[3];
char *l;
l = word;
現在,您可以執行以下任務:
*l = 'c';
*(l+1) = 'g';
*(l+2) = '\0';
但是現在您要將其復制到另一個指針,該指針必須指向另一個字符串,否則您應該為其分配內存。
char *pointer_to_second;
char second[3];
pointer_to_second = second;
或者,如果您希望獲得動態內存,請更改上面的三行,如下所示:
char *pointer_to_second = malloc(sizeof(char) * 3);
之后,您可以執行想要的操作:
strcpy(pointer_to_second, l);
但是請記住,如果使用的是C編譯器,則必須在開始時聲明所有變量,否則會出現錯誤。 如果您使用的是C ++編譯器,則無需擔心。
當您嘗試訪問不屬於向量的字段時,就會發生分段錯誤。 例如,如果您嘗試這樣做:
printf("The value in position 3 of my pointer is %c\n", *(l + 3));
您可能會得到一個錯誤,因為您的指針有3個位置,並且您試圖訪問第4個位置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.