char s[6] = {'h','e','l','l','o','\0'};
char *s = "hello";
4 Réponses :
Votre code tente de modifier un littéral à chaîne qui n'est pas autorisé dans C ou C ++ si vous modifiez: à: p>
Si vous faites Char S [6] = {'H', 'E', 'L', 'L', 'O', '\ 0'}; code> vous mettez 6 < Code> Char code> S dans un tableau sur la pile. Lorsque vous faites char * s = "bonjour"; code> Il n'y a qu'un pointeur sur la pile et la mémoire qu'il pointe pour peut-être être en lecture seule. L'écriture sur cette mémoire provoque un comportement non défini. P>
Avec certaines versions de GCC, vous pouvez autoriser la modification de chaînes statiques avec des chaînes de fibres. Pas qu'il y ait vraiment une bonne excuse pour le faire. P>
Vous pouvez essayer ceci:
void strrev(char *in, char *out, int len){
int i;
for(i = 0; i < len; i++){
out[len - i - 1] = in[i];
}
}
Peut-être un titre différent? Bien que l'exemple soit du code pour inverser une chaîne, la question réelle concerne la modification des matrices et des littéraux de chaîne.
Avez-vous une raison pour laquelle vous n'utilisez pas
strIV () code>? De plus, cela se brisera avec des caractères multi-octets.