Assignment makes integer from pointer without a cast [Résolu]

Signaler
Messages postés
15
Date d'inscription
lundi 17 octobre 2005
Statut
Membre
Dernière intervention
18 mars 2006
-
Messages postés
15
Date d'inscription
lundi 17 octobre 2005
Statut
Membre
Dernière intervention
18 mars 2006
-
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

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
23
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++
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
23
"*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++
Messages postés
15
Date d'inscription
lundi 17 octobre 2005
Statut
Membre
Dernière intervention
18 mars 2006

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 ^^
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
23
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++
Messages postés
15
Date d'inscription
lundi 17 octobre 2005
Statut
Membre
Dernière intervention
18 mars 2006

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
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
23
strcpy, strncpy

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

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 )
Messages postés
15
Date d'inscription
lundi 17 octobre 2005
Statut
Membre
Dernière intervention
18 mars 2006

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