为什么这个功能有效?
我不认为这是在c中复制char *的正确方法。
#include <stdio.h>
int main() {
const char* original = "TEST";
char* copy;
copy = original;
printf("%s\n", original);
printf("%x\n", &original);
printf("%s\n", copy);
printf("%x\n", ©);
return 0;
}
答案 0 :(得分:4)
它不会复制字符串。您只需为指针copy
分配字符串文字的地址,该地址也存储在original
指针中。两者都指向内存中的相同位置但具有不同的类型。
答案 1 :(得分:3)
不,你没有复制字符串,你通过a访问相同的字符串 指针。
如果要复制字符串,则必须使用strcpy
man strcpy
#include <string.h> char *strcpy(char *dest, const char *src);
strcpy()
函数复制src
指向的字符串,包括终止字符串 空字节('\0'
),指向dest
指向的缓冲区。琴弦可能不重叠, 并且目标字符串dest必须足够大才能接收副本。 小心缓冲区溢出!
这会复制一个字符串。
const char *original = "TEST";
char copy[20];
strcpy(copy, original);
这只是变量赋值。
const char* original = "TEST";
char* copy;
copy = original;
original
指向字符串"TEST"
的开头,它是一个字符串文字
因此指向只读存储器。这就是变量类型的原因
const char*
。这告诉您无法修改指向的内容
指针。但是,您可以将位置更改为指向的位置。
const char* original = "TEST";
original = "TEST1"; // OK
original[0] = 't'; // NOT OK
致printf
s:
printf("%s\n", original);
打印original
printf("%x\n", &original);
以变量original
的十六进制格式打印数字地址。
请注意,这是{strong>不,其中original
指向,original
位于printf("%s\n", copy);
存储
printf("%x\n", ©);
Sams作为第一个不同的变量,但指向相同的位置,因此 结果是一样的。
copy
与第二个相同,但这次是printf
变量的地址
打印。
请注意,如果您想使用"%p"
打印变量的地址,则表示您
应该使用{{1}}转换说明符。