C - strcpy指针

时间:2012-04-03 14:17:49

标签: c pointers strcpy

我想问一下strcpy。我在这里遇到了问题。这是我的代码:

char *string1 = "Sentence 1";
char *string2 = "A";

strcpy(string1, string2);

我认为我的代码没有问题。 string1和string2中第一个字符的地址被发送到函数strcpy。这段代码应该没有问题,对吧? 有人请帮我解决这个问题或向我解释..

谢谢。

3 个答案:

答案 0 :(得分:2)

有一个问题 - 你的指针都指向你无法写入的内存;它们指向编译器构建到应用程序中的常量。

您需要在可写内存中分配空间(例如,通过char string1[<size>];堆栈,或通过char *string1 = malloc(<size>);堆积)。请务必替换所需的缓冲区空间量,并至少为NULL终止添加一个额外的字节。如果您malloc(),请确保稍后free()

答案 1 :(得分:1)

这给出了未定义的行为。由于历史的怪癖(字符串文字不是const),编译器可能会允许它,但你基本上试图覆盖许多平台上你无法修改的数据。

答案 2 :(得分:0)

来自linux手册页:

  

char * strcpy(char * dest,const char * src);   strcpy()函数复制src指向的字符串,   包括终止空字节('\ 0')到指向的缓冲区   通过dest。字符串可能不重叠,并且目标字符串   dest必须足够大才能收到副本。

你的* dest指针有问题,因为它指向一个字符串文字,而不是分配的,可修改的内存。尝试将字符串1定义为char string1[BUFFER_LENGTH];,或使用malloc()动态分配。