Dépitée par des pointeurs...
Résolu/Fermé
A voir également:
- Dépitée par des pointeurs...
- [Souris] Pointeurs inversé ? - Forum souris / Touchpad
- Placer les pointeurs statistiques??? ✓ - Forum Webmastering
- 2 pointeurs de souris sur un écran ✓ - Forum souris / Touchpad
4 réponses
[Dal]
Messages postés
6198
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
13 décembre 2024
1 096
Modifié le 31 juil. 2020 à 18:53
Modifié le 31 juil. 2020 à 18:53
Salut bonuxdu13,
Quand tu postes du code, utilise les balises de code du forum, sinon c'est illisible.
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Tu commets plusieurs erreurs :
Dans ta fonction si tu fais
En effet, si
Comme le type
Ton deuxième code renvoie le même avertissement pour exactement la même raison.
En revanche, tu peux le faire fonctionner en utilisant les fonctions de copie prévues par le C
Vois ton manuel sur ces fonctions.
Dal
Quand tu postes du code, utilise les balises de code du forum, sinon c'est illisible.
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Tu commets plusieurs erreurs :
- en C
char * pointeur = "ko";
réserve juste une taille mémoire permettant àpointeur
de stocker une adresse vers quelque chose de type char, et affecte à cette adresse l'adresse vers un emplacement mémoire où se trouve une constante littérale que tu as définie dans lemain()
de ton code, d'une taille de 3 char formée par la chaîne C "ko" avec le caractère terminal'\0'
... - tu ne peux pas modifier le contenu de cet espace mémoire, car c'est une constante littérale
- tu peux par contre éventuellement modifier l'adresse mémoire contenue dans
pointeur
pour désigner un autre espace mémoire - c'est ce que tu ferais en faisant
ptr = "ok";
- cependant, si tu ne le fais pas dans le même scope que
main()
, ta modification d'adresse ne sera pas vue demain()
...
Dans ta fonction si tu fais
*ptr = "ok";tu as un warning qui t'alerte sur un conflit de types.
En effet, si
ptrest de type
char *alors en écrivant
*ptrtu déréférences le pointeur sur char et cette expression est évaluée par le C à un
char(ici
'o').
Comme le type
charest un type entier (représentant son code ASCII, pour simplifier) et que tu essayes d'affecter à un type entier l'adresse vers un emplacement mémoire où se trouve une constante littérale d'une chaîne C que tu as définie dans le code de ta fonction et dont le type est
char *, tu as l'erreur :
warning: assignment to ‘char’ from ‘char *’ makes integer from pointer without a cast [-Wint-conversion]
Ton deuxième code renvoie le même avertissement pour exactement la même raison.
En revanche, tu peux le faire fonctionner en utilisant les fonctions de copie prévues par le C
strcpy(),
strncpy(), ou
snprintf()(ou en copiant les
charsuccessivement si cela te plaît), en t'assurant que la chaîne que tu copies ne dépasse pas l'espace mémoire alloué.
Vois ton manuel sur ces fonctions.
Dal
yg_be
Messages postés
23405
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 décembre 2024
Ambassadeur
1 557
31 juil. 2020 à 19:45
31 juil. 2020 à 19:45
bonjour, tu exprimes ton sentiment par rapport aux pointeurs.
je me demande ce que les pointeurs pensent de toi.
je me demande ce que les pointeurs pensent de toi.
Merci pour ta réponse détaillée. C'est bizarre parce que si je fais ce code avec des entiers, ça compile et l'effet de bord de la fonction est présent :
le résultat : dans la fonction pointeur vaut : 1
après la fonction, le pointeur vaut : 2
J'étais partie de l'idée qu'un argument passé par adresse devait fournir cet effet de bord quelque soit le type de la variable mise sous pointeur...
je vais aller potasser les quelques fonctions de copie que tu m'as donné.
#include <stdio.h> #include <stdlib.h> void f(int* ptr); int main(void) { int pointeur = 1; f(&pointeur); printf("apres la fonction, le pointeur vaut %d\n", pointeur); return 0; } void f(int* ptr) { printf("dans la fonction pointeur vaut : %d\n", *ptr); *ptr = 2; }
le résultat : dans la fonction pointeur vaut : 1
après la fonction, le pointeur vaut : 2
J'étais partie de l'idée qu'un argument passé par adresse devait fournir cet effet de bord quelque soit le type de la variable mise sous pointeur...
je vais aller potasser les quelques fonctions de copie que tu m'as donné.
1 août 2020 à 07:07
après la fonction, le pointeur vaut : ok
Je te remercie beaucoup!
20 août 2020 à 14:10
22 août 2020 à 17:34
Modifié le 25 août 2020 à 13:26
26 août 2020 à 09:13