Bien que le codage d'une fonction simple pour supprimer un caractère particulier d'une chaîne, je suis tombé sur cette question étrange:Différence entre char * str = "STRING" et 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;
}
Ce que je ne comprends pas pourquoi est le deuxième test échoue? Pour moi, il semble que la première notation char *ptr = "string";
est équivalente à celle-ci: char ptr[] = "string";
.
N'est-ce pas le cas?
Très bon article sur ce sujet: http://eli.thegreenplace.net/2009/10/21/are-pointers-and-arrays-equivalent-in-c/ – jyz
Lire: [Différence entre 'char * str 'et' char str [] 'et comment les deux magasins en mémoire?] (http://stackoverflow.com/questions/15177420/what-does-sizeofarray-return/15177499#15177499) –