J'écris une application fastcgi pour mon site en C. Ne demandez pas pourquoi, laissez toute cette partie. Aidez-moi simplement avec ce problème, je veux remplacer les espaces dans la chaîne de requête avec% 20. Voici le code que j'utilise, mais je ne vois pas 20 dans la sortie, seulement%. Où est le problème?Remplacer des espaces avec% 20 en C
code:
unsigned int i = 0;
/*
* Replace spaces with its hex %20
* It will be converted back to space in the actual processing
* They make the application segfault in strtok_r()
*/
char *qstr = NULL;
for(i = 0; i <= strlen(qry); i++) {
void *_tmp;
if(qry[i] == ' ') {
_tmp = realloc(qstr, (i + 2) * sizeof(char));
if(!_tmp) error("realloc() failed while allocting string memory (space)\n");
qstr = (char *) _tmp;
qstr[i] = '%'; qstr[i + 1] = '2'; qstr[i + 2] = '0';
} else {
_tmp = realloc(qstr, (i + 1) * sizeof(char));
if(!_tmp) error("realloc() failed while allocating string memory (not space)\n");
qstr = (char *) _tmp;
qstr[i] = qry[i];
}
}
Dans le code, qry est char *, vient comme un paramètre réel à la fonction. J'ai essayé avec i + 3, 4, 5 dans realloc() dans le bloc remplaçant l'espace, sans succès.
Pour que votre code fonctionne, vous devez ajouter 'i + = 2' au corps de l'instruction if. Cependant, le code dans ma réponse ci-dessous évite d'autres pièges de gestion de chaîne C dans lesquels vous êtes impliqués. – David