在C中复制char *

时间:2018-01-15 23:59:22

标签: c pointers char

为什么这个功能有效?
我不认为这是在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", &copy);

    return 0;
}

2 个答案:

答案 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", &copy);

Sams作为第一个不同的变量,但指向相同的位置,因此 结果是一样的。

copy

与第二个相同,但这次是printf变量的地址 打印。

请注意,如果您想使用"%p"打印变量的地址,则表示您 应该使用{{1}}转换说明符。