gpt4 book ai didi

c - char* 和 char[] 与 strcpy() 的区别

转载 作者:太空狗 更新时间:2023-10-29 14:50:27 24 4
gpt4 key购买 nike

在过去的几个小时里,我一直在为一个我理解的问题而烦恼。这是我的麻烦:

void cut_str(char* entry, int offset) {
strcpy(entry, entry + offset);
}

char works[128] = "example1\0";
char* doesnt = "example2\0";

printf("output:\n");

cut_str(works, 2);
printf("%s\n", works);

cut_str(doesnt, 2);
printf("%s\n", doesnt);

// output:
// ample1
// Segmentation: fault

我觉得关于 char*/char[] 有一些重要的东西我没有说到这里。

最佳答案

区别在于指向属于字符串常量的内存,因此不可写。

当你这样做的时候

char  works[128] = "example1\0";

编译器将不可写字符串的内容复制到可写数组中。顺便说一句,\0 不是必需的。

然而,当你这样做时,

char* doesnt = "example2\0";

编译器将指针指向不可写的内存区域。同样,\0 将由编译器插入。

如果您正在使用 gcc,您可以让它警告您有关使用字符串文字初始化可写的 char *。选项是 -Wwrite-strings。您将收到如下所示的警告:

 warning: initialization discards qualifiers from pointer target type

声明doesnt 指针的正确方法如下:

const char* doesnt = "example2\0";

关于c - char* 和 char[] 与 strcpy() 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11254953/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com