Разница между char * str = «STRING» и char str [] = «STRING»?

При написании простой функции для удаления определенного символа из строки я столкнулся с этой странной проблемой:

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 = "строка"; эквивалентна этой: char ptr [] = "строка"; .

Не это так?

25
задан codaddict 6 October 2010 в 06:00
поделиться