Probleme bizard sur les pointeurs en C ! - C - Programmation
Marsh Posté le 19-04-2004 à 16:07:58
*(*tableauParametres+1) & 0xDF)
c'est quoi ça ? mettre en majuscule ? bordel ce que c'est crade. toupper() et on en parle plus
tcIndice=malloc(sizeof *tableauParametres);
bonjour, vous venez d'allouez 4octets ...
tu veux pas utiliser un i comme tout le monde, parce que là sinon, c'est crade, tu incrémentes, tu décréments, tu dereferences, etc ... tu t'y perds
Marsh Posté le 19-04-2004 à 16:12:01
Taz a écrit : *(*tableauParametres+1) & 0xDF) |
En fait c'est du code que j'ai repris, du code "pro" comme ils disent.
c'est quoi le "i" comme tout le monde ?
Sinon, vois tu le probleme ? Des que me parametre 1 fait disons moinds de 10 caracteres, ça passe. Des qu'il depasse les 20 caracteres, segfault
Marsh Posté le 19-04-2004 à 16:13:26
ben for(i=0; i<nbparam; ++i) { }
le problème ? ben c'est le sizeof te retourn invariablement sizeof(char*)
Marsh Posté le 19-04-2004 à 16:17:37
tcIndice=malloc(sizeof *tableauParametres);
printf("OUF \n" );
sprintf(tcIndice,"%s",*tableauParametres);
t'es sous linux sam ?
tcIndice = strdup(*tableauParametres);
fera bien mieux le boulot (strdup étant malloc + strcpy)
Marsh Posté le 19-04-2004 à 16:31:02
samuelp a écrit : ...
|
Il faut aussi vérifier que le paramètre *++tableauParametres existe réellement.
Marsh Posté le 19-04-2004 à 16:32:38
*++tableauParametres;
moi pas comprendre cette instruction avant le switch
Marsh Posté le 19-04-2004 à 16:46:02
Taz a écrit : *++tableauParametres; |
je parie que c'est pour sauter le '-' dans les options...
par exemple, pour le "-C" il regarde "C"
t'as pas getopt ou un equivalent , là ?
Marsh Posté le 19-04-2004 à 16:46:28
Et moi je ne comprends pas non plus pourquoi il y a :
while(--nbParametres)
et à la fin du while nbParametres--;
si nbParametres est impair c'est badaboum
Marsh Posté le 19-04-2004 à 16:48:42
fli a écrit : Et moi je ne comprends pas non plus pourquoi il y a : |
même ordre d'idée : le nbParametres-- doit etre là pour sauter la valeur du parametre que l'on vient de trouver...
franchement, en ré-ecrivant la fonction tu gagnerais du temps...
Marsh Posté le 19-04-2004 à 16:49:26
philou_a7 a écrit : |
sauf que ça n'est pas la bonne expression
Marsh Posté le 19-04-2004 à 16:51:00
philou_a7 a écrit : |
pour sauter le moins c'est dans le switch : *(*tableauParametres+1)
Marsh Posté le 19-04-2004 à 17:36:56
Taz a écrit : *++tableauParametres; |
Le nom du programme ?
Ben non en fait, c'est dans le switch.
Ben si c'est ça, en fait la premère fois ça saute le nom du programme et ensuite la valeur qui vient d'être prise en compte.
Marsh Posté le 19-04-2004 à 17:54:58
pour le toupper, ça me fait un warning :
tableauParametres[i]=toupper(tableauParametres[i]);
Je sais pourquoi, mais comment dire au systeme que je m'attend à un caractere ???
Marsh Posté le 19-04-2004 à 17:57:07
Taz a écrit : sauf que ça n'est pas la bonne expression |
j'avoue que j'ai pas detaillé le code, c'etait la premiere chose qui me venait a l'esprit
Marsh Posté le 19-04-2004 à 18:02:24
samuelp a écrit : pour le toupper, ça me fait un warning : |
Le paramètre de la fonction doit être un caractère et pas une chaîne.
TOUPPER(3) Manuel du programmeur Linux TOUPPER(3) |
Au pire tu peux toujours écrire :
switch (tableauParametres[i][1]) |
Mais bon si le paramètre est vide c'est problematique.
Marsh Posté le 20-04-2004 à 01:55:27
Code :
|
mmm... Je lis pas plus loin
Marsh Posté le 20-04-2004 à 08:58:19
JagStang a écrit : int obtenirParametres(int nbParametres, char * tableauParametres[]) |
Non c'est bon puisque le nom du programme n'est pas un paramètre même si c'est le premier élément de la liste.
tableauParametres[0]="$chemin$nom_du_programme" |
Marsh Posté le 21-04-2004 à 01:20:18
malloc ( sizeof * xxxx )... Mais bien sur...
Un malloc alloue généralement non pas la taille demandée mais la taille aligné sur 8, 16 voire 32 octets...
Donc ton truc doit marcher avec 15 caractères (16 en comptant le 0 de fin) et pas 16...
Tu croies encore que sizeof renvoi la longueur d'une chaine ??? Retourne voir tes bases...
sizeof est une commande préprocesseur ! Cela veut dire que c'est à la compilation que la valeur est générée et pas pendant l'exécution.
Un code pro... code pourri !
Les post et pré incrémentation c'est pour faire genre je suis trop fort... Dans le genre, je fais ça aussi... a = i?(0): (-2);
Et puis on peut faire ça aussi (DWORD)(*((float *)a)[1])+23.1F)
On peut faire tout ce qu'on veut en C... même des plantages fastoches... *((dword *)(a-a)) = 0;
Marsh Posté le 21-04-2004 à 11:44:04
christophe_d13 a écrit : malloc ( sizeof * xxxx )... Mais bien sur... |
déjà dit
christophe_d13 a écrit : |
pas en C99
Marsh Posté le 21-04-2004 à 14:33:46
Taz> Qu'est ce que j'en sais que c'est en C99 (je ne connaissais même pas son existance...merci Taz et Google, je mourrait moins bête). Mais il a précisé en C.
J'ai déjà vu tellement de programmeur faire un sizeof à la place d'un strlen que ça m'énerve toujours plus à chaque fois.
Désolé, sans rancune.
Marsh Posté le 19-04-2004 à 15:58:18
Bonjour,
j'ai un probleme bizard en C. J'execute un programme executable en C, compilé donc. Je lui passe 3 paramètres.
Si je depasse un certain nombre de caractere sur le 1 parametre, ça me genere un segfault.
Le plus bizard, c'est qu'en voulant debuguer, j'ai :
printf("TOTO \n" );
ça passe
printf("TOTO" );
segfault !
Voila la fonction :
nbparametres c'est le argc et tableauParametres le argv de la fonction main.
Quelqu'un aurait une idée ?