J'ai vu beaucoup de questions à ce sujet sur Stackoverflow, mais la lecture des réponses ne précisait pas cela pour moi, probablement parce que je suis un débutant total de la programmation C. Voici le code:
#include <stdio.h> char* squeeze(char s[], char c); main() { printf("%s", squeeze("hello", 'o')); } char* squeeze(char s[], char c) { int i, j; for(i = j = 0; s[i] != '\0'; i++) if(s[i] != c) s[j++] = s[i]; s[j] = '\0'; return s; }
3 Réponses :
Le problème est que le tableau constante em> charrette On vous attendrait qu'une telle constante ne pouvait être transmise qu'à un argument "bonjour" code> n'est peut-être pas correctement modifié par la fonction auquel elle a été transmise. Donc, assurez-vous simplement que vous passez un tableau non constant (par exemple en effectuant une matrice locale à passer, tant que le résultat n'est pas nécessaire en dehors de l'appelant code> de code>): < pré> xxx pré>
const code> (afin que le compilateur lui-même puisse vous dire ce que vous faites mal), mais, hélas, ce n'est pas ce que les mandats standard C (probablement pour des raisons de compatibilité à l'envers avec le code historique). P> P>
Il n'y a rien de temporaire à ce sujet, la chaîne est stockée dans la mémoire "statique".
L'argument 1ère transmis à la fonction Squeeze est un Le transmettez-le plutôt d'un tableau de caractères modifiable: p> lecture seule code> littéral de chaîne
"bonjour" code>, que vous essayez de modifier.
On pourrait également invoquer le principe de moins surprise de suggérer de faire une copie de la chaîne, à la place. Si je passe un char * dans une fonction qui retourne Char *, je ne m'attends peut-être pas à ce que cela modifie la matrice en place. (Les designers de l'API sont souvent négligés pour savoir si elles utilisent const i>.)
Ceci essaie de modifier des données non modifiables.
"Bonjour" est une chaîne constante, stockée en mémoire quelque part. Ce que vous essayez de faire, alors, le change, et cela n'est généralement pas autorisé. Je ne vois pas ce que vous entendez par "statique", mais ce que vous voulez serait quelque chose comme ... p>
@Snitko: Où est le type de retour de
principal () code>?