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