pointeur et double pointeur
Bonjour.
Je cherche à pointer vers un mot dans une chaine de caractères via un programme tel que celui ci dessous.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| #include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* getLastWordKO(char* src, char* lastWord);
char* getLastWordOK(char* src, char** lastWord);
int main()
{
char* testStr = "chaine test\0";
char* lastWord = "str\0";
char* lastWord2 = "str2\0";
lastWord2 = getLastWordKO(testStr, lastWord);
printf("KO : param : %s - ret : %s\r\n", lastWord, lastWord2);
lastWord2 = getLastWordOK(testStr, &lastWord);
printf("OK : param : %s - ret : %s\r\n", lastWord, lastWord2);
return 0;
}
//redirection de lastword pour pointer vers le premier espace.
//Ne fonctionne pas sur le pointeur passé en paramètre, mais retourne bien la bonne adresse.
char* getLastWordKO(char* src, char* lastWord)
{
lastWord = strrchr(src, ' ')+1;
return lastWord;
}
//redirection de lastword pour pointer vers le premier espace.
//fonctionne dans les 2 cas.
char* getLastWordOK(char* src, char** lastWord)
{
*lastWord = strrchr(src, ' ')+1;
return *lastWord;
} |
En passant par un simple pointeur, la première fonction renvoie bien la bonne adresse (lastWord2 pointe vers "test\0"), mais le pointeur lastWord n'est pas modifié et pointe vers "str\0"
En utilisant un double pointeur dans la deuxième fonction, le résultat est correct (les deux pointeurs sont à l'adresse de "test\0").
J'ai du mal à comprendre ce qui ne fonctionne pas dans le premier cas. c'est le fait de modifier une adresse plutôt qu'une donnée ?
Dans ce cas, en écrivant dans la première fonction *lastWord ="aaa\0"; ou plutôt strcpy(lastWord, "aaa\0"); mon programme devrait afficher aaa au lieu de str, mais cela me donne une erreur d'exécution dans les 2 cas...
merci d'avance pour vos éclaircissements.