我想问一下strcpy。我这里有问题。这是我的代码:
char *string1 = "Sentence 1";
char *string2 = "A";
strcpy(string1, string2);
我认为那里的代码没有问题。string1 和 string2 中第一个字符的地址被发送到函数strcpy
。这段代码应该没有问题吧?任何人请帮我解决这个问题或向我解释..
谢谢你。
有一个问题——你的指针都指向你无法写入的内存;它们指向编译器构建到您的应用程序中的常量。
您需要在可写内存中分配空间(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 指针有问题,因为它指向字符串文字而不是分配的可修改内存。尝试将字符串一定义为char string1[BUFFER_LENGTH];
或使用动态分配它malloc()
。