繁体   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