Problème avec les char* [Newby] - C - Programmation
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..
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.
Marsh Posté le 08-01-2004 à 03:02:08
moi je fais plein de char * sans malloc ni new, jamé de pb p
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 p |
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.
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 p |
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 :
|
Marsh Posté le 08-01-2004 à 18:17:55
qui est mauvais
const char *
et n'oubliez pas vos amies puts et fputs
Marsh Posté le 08-01-2004 à 22:04:44
Ace17 a écrit : |
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 :
|
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)
Marsh Posté le 09-01-2004 à 12:26:49
Diantre ! Doublon ^^
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)
Marsh Posté le 09-01-2004 à 13:16:53
Wiiip a écrit : |
std::string, c'est du c++
Marsh Posté le 09-01-2004 à 13:29:22
ReplyMarsh Posté le 09-01-2004 à 13:32:11
ouais 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
Marsh Posté le 09-01-2004 à 13:48:20
pi surtout
écrire *(buffer+i) puis buffer[i] c'est vraiment intelligent
Marsh Posté le 09-01-2004 à 14:42:29
puis le *(i-16) il sert a quoi ?
Marsh Posté le 09-01-2004 à 14:48:17
ReplyMarsh 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
Marsh Posté le 09-01-2004 à 15:27:00
Reply
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.