【发布时间】:2011-04-21 05:48:22
【问题描述】:
在编写一个从字符串中删除特定字符的简单函数时,我遇到了一个奇怪的问题:
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";。
不是这样吗?
【问题讨论】:
-
关于这个话题的非常好的文章:eli.thegreenplace.net/2009/10/21/…
标签: c arrays string pointers stack