-1

我想问一下strcpy。我这里有问题。这是我的代码:

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

strcpy(string1, string2);

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

谢谢你。

4

3 回答 3

2

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

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

于 2012-04-03T14:21:54.883 回答
1

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

于 2012-04-03T14:22:08.523 回答
0

从 linux 手册页:

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

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

于 2012-04-03T14:26:03.120 回答