簡體   English   中英

字符串復制(strcpy)

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

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