Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C-strcpy指针_C_Pointers_Strcpy - Fatal编程技术网

C-strcpy指针

C-strcpy指针,c,pointers,strcpy,C,Pointers,Strcpy,我想问一下strcpy。我这里有问题。这是我的密码: char *string1 = "Sentence 1"; char *string2 = "A"; strcpy(string1, string2); 我认为我的代码中没有问题。string1和string2中第一个字符的地址被发送到函数strcpy。这段代码应该没有问题吧? 任何人请帮我解决这个问题或向我解释 谢谢。有一个问题——您的指针都指向无法写入的内存;它们指向编译器构建到应用程序中的常量 您需要在可写内存中分配空间(例如,堆栈

我想问一下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]
工作的原因。我是指针方面的新手,所以有点困惑如何使用指针。再次感谢。