[Newby] Problème avec les char*

Problème avec les char* [Newby] - C - Programmation

Marsh Posté le 27-12-2003 à 18:31:16    

Bonjour, étant grand débutant en c je me bats avec les char* et ils sont en train de gagner (vive les strings en c++ et autres)!
 
Voilà le truc :  
j?ai une structure du genre :
 
Struct structure {
 Unsigned char valeur[16] ;
 ..
 ..
 ..
} ;
 
et j?ai un buffer du type char* buffer ;
et une variable de type structure
et je veux remplir mon buffer avec le champ valeur de ma structure donc j?ai écris dans une boucle : buffer[i] = s.valeur[i] ; et la c?est une erreur de segmentation. Pourquoi sachant que printf("%s",buffer[i]) ça marche ?  
 
je ne veux pas déclarer char buffer[n] parce que je ne connais pas n (même si dans l?exemple que j?ai donné on connait n).
 
Merci de votre aide.
 
 
 
 

Reply

Marsh Posté le 27-12-2003 à 18:31:16   

Reply

Marsh Posté le 27-12-2003 à 18:34:42    

Bah sans malloc ou [] ça va pas l'faire hein donc le n faudra que tu le sortes de qq part de toutes façons..

Reply

Marsh Posté le 28-12-2003 à 11:30:41    

char* ca veut pas dire chaine de caractere... ca veut dire pointeur vers une chaine de caracteres. Si tu ne le fais pas pointer vers une chaine (que tu auras allouée avec un new ou un malloc) et que tu t'en sers quand meme tu vas avoir des problemes car tu es en train d'écrire n'importe ou dans la mémoire de ton application.

Reply

Marsh Posté le 08-01-2004 à 03:02:08    

moi je fais plein de char * sans malloc ni new, jamé de pb :pp

Reply

Marsh Posté le 08-01-2004 à 09:38:15    

Zera a écrit :

moi je fais plein de char * sans malloc ni new, jamé de pb :pp


 
[:le kneu] c'est un peu comme si tu dis que ce n'est pas dangereux de fermer les yeux pendant les trajets sur autoroute parce que tu n'as jamais eu d'accident.


Message édité par antp le 08-01-2004 à 09:39:59

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 08-01-2004 à 18:13:44    

Zera a écrit :

moi je fais plein de char * sans malloc ni new, jamé de pb :pp


 
Parce que tu peux tres bien faire des char* qui pointent vers des chaines déja allouées ( passage de chaine en parametre, par exemple )

Code :
  1. void Affiche(char* s)
  2. {
  3.   printf(s);
  4. }
  5. int main()
  6. {
  7.   Affiche("J'apprends les pointeurs" );
  8. }


Message édité par Ace17 le 08-01-2004 à 18:14:50
Reply

Marsh Posté le 08-01-2004 à 18:17:55    

qui est mauvais
const char *
 
et n'oubliez pas vos amies puts et fputs :o

Reply

Marsh Posté le 08-01-2004 à 22:04:44    

Ace17 a écrit :


void Affiche(char* s)
{
  printf(s);
}
 
int main()
{
  Affiche("J'appren%ds les pointeur%s" );
}


 
[:maitre drasche]


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
Reply

Marsh Posté le 09-01-2004 à 12:07:33    

dudul51 a écrit :

et je veux remplir mon buffer avec le champ valeur de ma structure donc j?ai écris dans une boucle : buffer[i] = s.valeur[i] ; et la c?est une erreur de segmentation. Pourquoi sachant que printf("%s",buffer[i]) ça marche ?  


 
attention a la condition de sortie de ta boucle :
 

Code :
  1. for (int i=0; i<16; ++i) buffer[i] = s.valeur[i] ;


 
est faux : en effet, buffer[15] par exemple n'est pas valide pour const char* buffer = "test";
 
tu peux donc utiliser strncpy (mieux que strcpy pour eviter egalement les dépassement du tableau unsigned char valeur[16];)
 
(sinon je sais pas si c'est important mais je trouve ca plus propre de garder le mm typage : unsigned char ou char)


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 09-01-2004 à 12:26:49    

Diantre ! Doublon ^^


Message édité par Wiiip le 09-01-2004 à 12:27:32
Reply

Marsh Posté le 09-01-2004 à 12:26:49   

Reply

Marsh Posté le 09-01-2004 à 12:27:12    

i=0
while((*(buffer+i))*(i-16))
    buffer[i]=s.va[i++]
Maintenant, si buffer n'est pas une chaine qui se termine par \0, va mourrir ^^  ( char buffer [200] )
String, ça existe sinon ...
 
Wiiip - qui vient de repeter la même manip pendant 3 jours (res=grosbug)

Reply

Marsh Posté le 09-01-2004 à 13:16:53    

Wiiip a écrit :


String, ça existe sinon ...


 
std::string, c'est du c++ :o


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 09-01-2004 à 13:29:22    

Wiiip a écrit :

i=0
while((*(buffer+i))*(i-16))
    buffer[i]=s.va[i++]

ignoble

Reply

Marsh Posté le 09-01-2004 à 13:32:11    

ouais [:mlc] c'est illisible et un peu bourrin comme méthode
 
Et je doute des perfs par rapport à deux simples comparaisons, vu qu'une multiplication demande plus de cycles CPU


Message édité par antp le 09-01-2004 à 13:32:55

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 09-01-2004 à 13:48:20    

pi surtout
écrire *(buffer+i) puis buffer[i] c'est vraiment intelligent

Reply

Marsh Posté le 09-01-2004 à 14:42:29    

puis le *(i-16) il sert a quoi ?


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 09-01-2004 à 14:48:17    

BlackGoddess a écrit :

puis le *(i-16) il sert a quoi ?

ben quand on c'est pas faire un test ...

Reply

Marsh Posté le 09-01-2004 à 15:19:44    

taz a écrit :

ben quand on c'est pas faire un test ...


 
ou qu'on ne sait pas écrire :o
 
[:neowen]


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 09-01-2004 à 15:27:00    

antp a écrit :


 
ou qu'on ne sait pas écrire :o
 
[:neowen]

tant que je me débrouille en sait

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed