gpt4 book ai didi

c - char *str ="STRING"和 char str[] = "STRING"之间的区别?

转载 作者:太空狗 更新时间:2023-10-29 16:24:42 25 4
gpt4 key购买 nike

在编写一个简单的函数来从字符串中删除特定字符时,我遇到了这个奇怪的问题:

void str_remove_chars( char *str, char to_remove)
{
if(str && to_remove)
{
char *ptr = str;
char *cur = str;
while(*ptr != '\0')
{
if(*ptr != to_remove)
{
if(ptr != cur)
{
cur[0] = ptr[0];
}
cur++;
}
ptr++;
}
cur[0] = '\0';
}
}
int main()
{
setbuf(stdout, NULL);
{
char test[] = "string test"; // stack allocation?
printf("Test: %s\n", test);
str_remove_chars(test, ' '); // works
printf("After: %s\n",test);
}
{
char *test = "string test"; // non-writable?
printf("Test: %s\n", test);
str_remove_chars(test, ' '); // crash!!
printf("After: %s\n",test);
}

return 0;
}

我不明白为什么第二次测试失败了?在我看来,第一个符号 char *ptr = "string"; 等同于这个符号:char ptr[] = "string";

不是这样吗?

最佳答案

两个声明不一样。

char ptr[] = "string"; 声明一个大小为 7 的 char 数组并用字符
s 初始化它> ,t,r,i,n,g\0。您允许修改此数组的内容。

char *ptr = "string";ptr 声明为 char 指针并使用 string literal 的地址对其进行初始化string"只读。修改字符串文字是未定义的行为。您所看到的(段错误)是未定义行为的一种表现形式。

关于c - char *str ="STRING"和 char str[] = "STRING"之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3862842/

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