Assignment makes integer from pointer without a cast

Résolu
alussk
Messages postés
15
Date d'inscription
lundi 17 octobre 2005
Statut
Membre
Dernière intervention
18 mars 2006
- 31 oct. 2005 à 11:39
alussk
Messages postés
15
Date d'inscription
lundi 17 octobre 2005
Statut
Membre
Dernière intervention
18 mars 2006
- 31 oct. 2005 à 13:21
Bonjour,
ma fonction est censé generée une clé a partir d'un mot de passe donné
quand je compile j'ai deux warning:

char keygen(char *fileread, char *passwd, char *key){
int i, len;
char pass[12];
char invpass[12];
FILE *pfileread;
char invkey[filesize(fileread)];
*invpass=reverse(passwd);
for(i=0;i<12;i++){
key[i]=passwd[i] ^ invpass[i];
}
*invkey=strncat(passwd,key,sizeof(key)); /*Warning n° 1*/
for(i=0;i<filesize(fileread);i++){
key[i]= invkey[i] ^ (reverse(invkey));
*invkey=strncat(passwd,key,sizeof (key)); /*Warning n°2 */
}
fclose(pfileread);
}

Etant donné que je debute en C (je travaille actuellement sur mon second programme dans ce langage), je ne suis pas très a l'aise avec les pointeur (j'ai lu plusieur cours a ce sujet mais rien n'y fait) et je n'arrive pas a supprimé ces warnings.
Quelqu'un saurait-il ou se trouve mon erreur ????
A voir également:

8 réponses

BruNews
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
31 oct. 2005 à 13:16
strncat(passwd,key,sizeof(key));
Fais gaffe au sizeof, sizeof(key) vaut 4 car tu reçois *key en param. La taille d'un pointeur es tde 4 octets sur system 32 bits.
Pour le reste faut te plonger dans un bouquin de C et bien assimiler pointeurs et tableaux.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
3
BruNews
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
31 oct. 2005 à 12:03
"*invkey" vaut "invkey[0]"
normal que le compilo te prévienne strncat retourne un POINTEUR char*, ça ne tiendra jamais sur 8 bits d'un char (non pointeur mais 1 seul octet).

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
alussk
Messages postés
15
Date d'inscription
lundi 17 octobre 2005
Statut
Membre
Dernière intervention
18 mars 2006

31 oct. 2005 à 12:28
OOOk, j'ai rajouté char *pinvkey=(char *)invkey; et ca marche (en tout cas pas de warnings)!!
merci pour la précision, je m'en souviendrais ^^
0
BruNews
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
31 oct. 2005 à 12:34
Tu supprimes le warning mais m'étonnerai que ça donne grand chose de cohérent.
strncat retourne pointeur sur destination, donc 'passwd' dans ton exemple. Que vaudrait d'aller mettre une adresse tronquée aux 8 bits bas dans un char ??? l'adresse ne sera pas retrouvable ultérieurement.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
alussk
Messages postés
15
Date d'inscription
lundi 17 octobre 2005
Statut
Membre
Dernière intervention
18 mars 2006

31 oct. 2005 à 13:02
oulah, je me perds de plus en plus... reprenons
dans mon cas strncat renvoi un pointeur X sur passwd, qui, normalement, a pris la valeur passwd+key (si je me trompe pa sur l'utilité de strncat).
Moi je veux recuperer la valeur pointée par X et la mettre ds un char
avec tes explication je comprends pourquoi
*invkey=strncat(passwd,key,sizeof(key));
ne donne rien de bon mais franchement j'arrive pas a comprendre comment faire pour mettre la concatenation de passwd et de key dans invkey, je finis meme par me demander si c'est possible finalement...

PS: effectivement, les warnings ont disparu mais j'obtiens des resultat encore plus bizarre qu'avant a l'execution
0
BruNews
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
31 oct. 2005 à 13:07
strcpy, strncpy

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
alussk
Messages postés
15
Date d'inscription
lundi 17 octobre 2005
Statut
Membre
Dernière intervention
18 mars 2006

31 oct. 2005 à 13:08
j'ai oublié de precisé que dans mon main passwd a été déclaré comme suit : char passwd[12], je me demande docn, si je fais strncat(passwd,key,sizeof(key)); ou "part" la concatenation des deux chaines ???

(je sais, je pose beaucoup de questions, mais je peux pas m'en empecher )
0
alussk
Messages postés
15
Date d'inscription
lundi 17 octobre 2005
Statut
Membre
Dernière intervention
18 mars 2006

31 oct. 2005 à 13:21
Oki pour le bouquin, de toute façon plus j'avance plus je suis obligé de me servir de trucs que je ne connais pas ^^"
En tout cas merci pour strcpy, strncpy, j'ai compris le principe
reste a savoir si je pourrai l'appliquer mdr
0