Comment boucler une chaîne créée par un pointeur

Ce que je veux faire, c‘est parcourir la citation jusqu’à la fin de la citation / (* la citation ne contient rien). Mon code est-il valide?

char *quote = "To be or not to be, that is the question."; for (quote = 0; *quote != NULL; quote++){ *quote = tolower(*quote); } 

Vous aurez probablement besoin d’un autre pointeur pour parcourir le tableau, sinon l’access à votre chaîne d’origine sera perdu.

Et de préférence, utilisez uniquement NULL pour les pointeurs.

N’utilisez pas 0 comme valeur initiale, sauf si vous souhaitez utiliser des index (voir ci-dessous).

Faire char *quote = fera simplement que quote point le littéral en lecture seule, au lieu de copier la chaîne. Utilisez char quote[] = place.

 char quote[] = "To be or not to be, that is the question."; char *quotePtr; for (quotePtr = quote; *quotePtr != '\0'; quotePtr++){ *quotePtr = tolower(*quotePtr); } 

Test .

Utilisation d’indices:

 char quote[] = "To be or not to be, that is the question."; int i; for (i = 0; quote[i] != '\0'; i++){ quote[i] = tolower(quote[i]); } 

Test .

Considérez ceci comme un élargissement de la réponse donnée par Dukeling

Quand vous utilisez

 char *quote = "Hello World"; 

Cela crée une chaîne en lecture seule, ce qui signifie que vous ne pouvez pas modifier son contenu de manière plus simple.

 Here *quote points to 'H' BUT, you cannot do *quote = 'A'; This will give you an error. 

Si vous souhaitez modifier les caractères d’une chaîne, il est recommandé d’utiliser des tableaux.

 char quote[] = "Hello World"; Here also *quote points to 'H' BUT, in this case *quote = 'A' is perfectly valid. The array quote will get changed. 

Vous réaffectez la quote dans votre for initialiseur, qui n’est pas valide et provoquera une violation d’access parce que vous la déréférencerez dans la partie *quote != NULL .

Sémantiquement, NULL et '\0' sont équivalents, mais je préférerais syntaxiquement ceci. Notez qu’en utilisant cette approche, vous gardez un pointeur sur (le début de) la chaîne.

 wchar const_t* quote = L"To be or not to be, that is the question."; for( wchar_t* c = quote; *c != '\0'; c++ ) { *c = tolower( *c ); } 

alternativement en utilisant un index:

 wchar const_t quote[] = L"To be or not to be, that is the question."; for( size_t i = 0; i < sizeof(quote); i++ ) { quote[i] = tolower( quote[i] ); } 

(notez que la sémantique de sizeof changera si la valeur de quote n'est pas connue au moment de la compilation)