我真的不知道该如何表达标题,我想要从另一个重叠的指针中编辑一个指针中的字符串。
我想在此代码中获得的是1abcd abcd
,但获得的却是123 abcd
#include <stdio.h>
int main() {
char* x = (char*)malloc(4);
x = "123";
char* y = (char*) x+1;
y = "abcd";
printf("%s %s",x,y);
}
问题是您分配给y
,然后又分配给y
。
char *y = x+1; // first assignment
y = "abcd"; // second assignment
y = "abcd";
不是副本。它为const char[5]
字符串abcd
至y
分配了一个指针。
这里有类似问题。
char *x = malloc(4);
x = "123";
x
首先从malloc
分配给存储器,但随后被const char[4]
123
覆盖。 malloc
内存泄漏。
如果要复制到x
指向的存储器中,则需要使用strcpy
。但是,x
只有4个字节。您将需要更多。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
// Allocate memory
char *x = malloc(6);
// Copy "123" the heap memory pointed to by x.
strcpy(x, "123");
// Assign a pointer to x+1 to y.
char *y = x+1;
// Copy "abcd" to the heap memory pointed to by y.
strcpy(y, "abcd");
// x='1abcd' y='abcd'
printf("x='%s' y='%s'\n",x,y);
}
注意,当源字符串和目标字符串的长度未知时,strcpy
不能安全使用。