Différence entre char *str=“STRING” et char str[] = “CHAÎNE”?

Lors de l'encodage d'une simple fonction pour supprimer un caractère particulier dans une chaîne, je suis tombé sur cette étrange question:

void str_remove_chars( char *str, char to_remove)
{
    if(str && to_remove)
    {
       char *ptr = str;
       char *cur = str;
       while(*ptr != '
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;
}
'
) { if(*ptr != to_remove) { if(ptr != cur) { cur[0] = ptr[0]; } cur++; } ptr++; } cur[0] = '
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;
}
'
; } } 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; }

Ce que je ne comprends pas est pourquoi le deuxième test échoue?
Pour moi, il ressemble à la première notation char *ptr = "string"; est équivalent à celui-ci: char ptr[] = "string";.

N'est-ce pas le cas?

InformationsquelleAutor Gui13 | 2010-10-05