Fonction majuscule
Résolu
hcp7kuz
Messages postés
250
Statut
Membre
-
hcp7kuz Messages postés 250 Statut Membre -
hcp7kuz Messages postés 250 Statut Membre -
Bonjour,
J'ai écris une fonction qui retourne une chaine mise en majuscule.
Problème, le fonction retourne effectivement la chaine en majuscule, mais avec également quelques caractères en plus, et je ne vois pas pourquoi.
Quelqu'un a un idée ?
Code :
Merci,
hcp7kuz
J'ai écris une fonction qui retourne une chaine mise en majuscule.
Problème, le fonction retourne effectivement la chaine en majuscule, mais avec également quelques caractères en plus, et je ne vois pas pourquoi.
Quelqu'un a un idée ?
Code :
char* strToUpper(char* chaine) {
char *result = NULL;
result = malloc((strlen(chaine) - 1) * sizeof(char));
int i;
for (i = 0; i < strlen(chaine); i++) {
result[i] = toupper(chaine[i]);
}
return result;
}
Merci,
hcp7kuz
A voir également:
- Fonction majuscule
- Fonction si et - Guide
- Majuscule - Guide
- É majuscule - Guide
- Code ascii de a majuscule - Guide
- Mettre en majuscule - Guide
1 réponse
yg_be
Messages postés
24281
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 585
bonjour, la chaîne de départ se termine par un caractère NULL, indiquant la fin de la chaîne.
strlen() te donne la longueur de la chaîne, sans ce caractère NULL.
donc, ta fonction retourne une chaîne non terminée par un caractère NULL, ce qui explique ce que tu observes.
strlen() te donne la longueur de la chaîne, sans ce caractère NULL.
donc, ta fonction retourne une chaîne non terminée par un caractère NULL, ce qui explique ce que tu observes.
A noter, qu'en C est garantit de valoir 1, il est donc inutile.
char * strToUpper(char * chaine) { char * result = NULL; int i; result = malloc((strlen(chaine) + 1)); for (i = 0; i < strlen(chaine); i++) { result[i] = toupper(chaine[i]); } result[i] = '\0'; return result; }On peut optimiser le code, aussi, en évitant de mettre dans la boucle for et en ne l'exécutant qu'une fois au début de la fonction.
Enfin, cela serait bien de tester que malloc a bien alloué la mémoire nécessaire et de décider de ce fait la fonction si ce n'est pas le cas.
Dal
Merci !