C-strcpy指针
我想问一下strcpy。我这里有问题。这是我的密码:C-strcpy指针,c,pointers,strcpy,C,Pointers,Strcpy,我想问一下strcpy。我这里有问题。这是我的密码: char *string1 = "Sentence 1"; char *string2 = "A"; strcpy(string1, string2); 我认为我的代码中没有问题。string1和string2中第一个字符的地址被发送到函数strcpy。这段代码应该没有问题吧? 任何人请帮我解决这个问题或向我解释 谢谢。有一个问题——您的指针都指向无法写入的内存;它们指向编译器构建到应用程序中的常量 您需要在可写内存中分配空间(例如,堆栈
char *string1 = "Sentence 1";
char *string2 = "A";
strcpy(string1, string2);
我认为我的代码中没有问题。string1和string2中第一个字符的地址被发送到函数strcpy
。这段代码应该没有问题吧?
任何人请帮我解决这个问题或向我解释
谢谢。有一个问题——您的指针都指向无法写入的内存;它们指向编译器构建到应用程序中的常量
您需要在可写内存中分配空间(例如,堆栈通过
char-string1[];
或堆通过char*string1=malloc();
)。确保替换为所需的缓冲区空间量,并至少为空终止添加一个额外字节。如果您malloc()
,请确保以后free()
这给出了未定义的行为。由于历史的特殊性(字符串文字不是常量),编译器可能会允许这样做,但您基本上是试图覆盖在许多平台上无法修改的数据。来自linux手册页:
char*strcpy(char*dest,const char*src);
函数的作用是复制src指向的字符串,
将终止的空字节('\0')包含到指向的缓冲区中
按目的地。字符串不能重叠,目标字符串不能重叠
dest必须足够大以接收副本
您的*dest指针有问题,因为它指向的是字符串文字,而不是分配的、可修改的内存。尝试将字符串1定义为
charstring1[BUFFER_LENGTH]代码>或使用malloc()
动态分配它无法更改字符串文字字符串文字(您的语句1
和“A”
)是不可修改的(受到未定义行为的惩罚)字符数组。你不能(可靠地)将strcpy()放入这样的数组中。我可以使用char*string1;只有那么我将使用字符串复制两次?谢谢!!这就解释了char-string2[50]
工作的原因。我是指针方面的新手,所以有点困惑如何使用指针。再次感谢。