int main(void){
unsigned char *une = "Il était^ une^ fois";
unsigned char *deux = "Il^ était deux^ fois.";
unsigned int len = strlen(une) + strlen(deux) + 1;
if(len)
joinLines2array(une, deux, len);
return 0;
}
Merci dans le sens je demande merci.
Jean Pierre Daviau
--
Easyphp1.8 with Apache1.3.24
Lcc, borland 5.5
windows Xp
asus p4 s533/333/133
Intel(R) Celeron (R) CPU 2.00 GHz
Processor Radeon7000 0x5159 agp
printf("n*cinq: %sn", *cinq[i*NCOLS + j]); affiche *cinq: Il Útait printf("%c", s[k]); affiche u n e ce qui est correct et ... crash. ne printf pas printf("n*cinq: %sn", *cinq[i*NCOLS + j]); affiche *cinq: une
int main(void){ unsigned char *une = "Il était^ une^ fois"; unsigned char *deux = "Il^ était deux^ fois."; unsigned int len = strlen(une) + strlen(deux) + 1;
printf("%snnn", une);
if(len) joinLines2array(une, deux, len);
return 0; }
Je m'améliore :-
printf("n*cinq: %sn", *cinq[i*NCOLS + j]); affiche *cinq: Il
Útait
printf("%c", s[k]); affiche u n e
ce qui est correct
et ... crash. ne printf pas
printf("n*cinq: %sn", *cinq[i*NCOLS + j]); affiche *cinq:
une
printf("n*cinq: %sn", *cinq[i*NCOLS + j]); affiche *cinq: Il Útait printf("%c", s[k]); affiche u n e ce qui est correct et ... crash. ne printf pas printf("n*cinq: %sn", *cinq[i*NCOLS + j]); affiche *cinq: une
int main(void){ unsigned char *une = "Il était^ une^ fois"; unsigned char *deux = "Il^ était deux^ fois."; unsigned int len = strlen(une) + strlen(deux) + 1;
printf("%snnn", une);
if(len) joinLines2array(une, deux, len);
return 0; }
Eric Levenez
Le 4/12/06 20:40, dans <pQ_ch.68753$, « Jean Pierre Daviau » a écrit :
Je m'améliore :-
code.c: In function 'joinLines2array': code.c:28: warning: pointer targets in passing argument 1 of 'strlen' differ in signedness code.c:40: warning: pointer targets in passing argument 1 of 'strlen' differ in signedness code.c:41: warning: pointer targets in passing argument 1 of 'strcpy' differ in signedness code.c:41: warning: pointer targets in passing argument 2 of 'strcpy' differ in signedness code.c:52: warning: pointer targets in passing argument 1 of 'strcat' differ in signedness code.c:52: warning: pointer targets in passing argument 2 of 'strcat' differ in signedness code.c: In function 'main': code.c:60: warning: pointer targets in initialization differ in signedness code.c:61: warning: pointer targets in initialization differ in signedness code.c:62: warning: pointer targets in passing argument 1 of 'strlen' differ in signedness code.c:62: warning: pointer targets in passing argument 1 of 'strlen' differ in signedness code.c: In function 'joinLines2array': code.c:19: warning: 'j' may be used uninitialized in this function
-- Éric Lévénez -- <http://www.levenez.com/> Unix is not only an OS, it's a way of life.
Le 4/12/06 20:40, dans <pQ_ch.68753$Cu4.1033636@wagner.videotron.net>,
« Jean Pierre Daviau » <Once@WasEno.ugh> a écrit :
Je m'améliore :-
code.c: In function 'joinLines2array':
code.c:28: warning: pointer targets in passing argument 1 of 'strlen' differ
in signedness
code.c:40: warning: pointer targets in passing argument 1 of 'strlen' differ
in signedness
code.c:41: warning: pointer targets in passing argument 1 of 'strcpy' differ
in signedness
code.c:41: warning: pointer targets in passing argument 2 of 'strcpy' differ
in signedness
code.c:52: warning: pointer targets in passing argument 1 of 'strcat' differ
in signedness
code.c:52: warning: pointer targets in passing argument 2 of 'strcat' differ
in signedness
code.c: In function 'main':
code.c:60: warning: pointer targets in initialization differ in signedness
code.c:61: warning: pointer targets in initialization differ in signedness
code.c:62: warning: pointer targets in passing argument 1 of 'strlen' differ
in signedness
code.c:62: warning: pointer targets in passing argument 1 of 'strlen' differ
in signedness
code.c: In function 'joinLines2array':
code.c:19: warning: 'j' may be used uninitialized in this function
--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.
Le 4/12/06 20:40, dans <pQ_ch.68753$, « Jean Pierre Daviau » a écrit :
Je m'améliore :-
code.c: In function 'joinLines2array': code.c:28: warning: pointer targets in passing argument 1 of 'strlen' differ in signedness code.c:40: warning: pointer targets in passing argument 1 of 'strlen' differ in signedness code.c:41: warning: pointer targets in passing argument 1 of 'strcpy' differ in signedness code.c:41: warning: pointer targets in passing argument 2 of 'strcpy' differ in signedness code.c:52: warning: pointer targets in passing argument 1 of 'strcat' differ in signedness code.c:52: warning: pointer targets in passing argument 2 of 'strcat' differ in signedness code.c: In function 'main': code.c:60: warning: pointer targets in initialization differ in signedness code.c:61: warning: pointer targets in initialization differ in signedness code.c:62: warning: pointer targets in passing argument 1 of 'strlen' differ in signedness code.c:62: warning: pointer targets in passing argument 1 of 'strlen' differ in signedness code.c: In function 'joinLines2array': code.c:19: warning: 'j' may be used uninitialized in this function
-- Éric Lévénez -- <http://www.levenez.com/> Unix is not only an OS, it's a way of life.
while (*ligne1 != 'n') { Semble inefficace, puisqu'il place le Tu de la deuxième ligne après le mot révolution de la première ligne. Donc il repart avec ligne2 ... Pourquoi?
C ' Ú t a i t ----------------------------C'Útait u n e --------------------------------- une p a i s i b l e ----------------------------paisible r Ú v o l u t i o n .-----------------------------------------------> n ? T u --------------------------------- rÚvolution.
Ú t a i s d e u x ------------------------Útais deux b o n n e s ------------------------------bonnes r Ú p Ú t i t i o n s .-----------------------------------------------> n ? % s
while (*ligne1 != 'n') {
Semble inefficace, puisqu'il place le Tu de la deuxième ligne après le mot
révolution de la première ligne. Donc il
repart avec ligne2 ... Pourquoi?
C ' Ú t a i t ----------------------------C'Útait
u n e --------------------------------- une
p a i s i b l e ----------------------------paisible
r Ú v o l u t i o n .-----------------------------------------------> n ?
T u --------------------------------- rÚvolution.
Ú t a i s d e u x ------------------------Útais deux
b o n n e s ------------------------------bonnes
r Ú p Ú t i t i o n s .-----------------------------------------------> n ?
% s
while (*ligne1 != 'n') { Semble inefficace, puisqu'il place le Tu de la deuxième ligne après le mot révolution de la première ligne. Donc il repart avec ligne2 ... Pourquoi?
C ' Ú t a i t ----------------------------C'Útait u n e --------------------------------- une p a i s i b l e ----------------------------paisible r Ú v o l u t i o n .-----------------------------------------------> n ? T u --------------------------------- rÚvolution.
Ú t a i s d e u x ------------------------Útais deux b o n n e s ------------------------------bonnes r Ú p Ú t i t i o n s .-----------------------------------------------> n ? % s
int main(void) { unsigned char *une = "C'était^ une^ paisible^ révolution.^n"; unsigned char *deux = "Tu étais deux bonnes répétitions.^n";
printf("%snnn", une);
joinLines2array(une, deux);
return 0; }
JPD
Gaël Tessier
Jean Pierre Daviau wrote:
Je l'ai! Mes salutations.
Ça marche peut-être, mais à voir ta façon d'utiliser les tableaux à deux dimensions, c'est un peu un coup de chance et on peut en déduire que tu n'as pas compris comment les utiliser.
unsigned char *cinq[NRANGS][NCOLS];
*cinq[i*NCOLS + j] = malloc(strlen(s)+1);
Pourquoi écrire "*cinq[i*NCOLS + j] = ..." alors que cinq est un tableau à deux dimensions. La bonne façon d'écrire serait : "cinq[i][j] = ...".
Les pointeurs (chaînes de caractères ici) et les tableaux ayant beaucoup d'analogies, tu fais des confusions. Avant de chercher à faire des programmes "compliqués", utilise un tableau d'entiers où tu n'auras pas besoin de malloc, remplis-le puis teste des parcours et des affichages de ce tableau.
-- Gaël Tessier http://www.tessier-net.org
Jean Pierre Daviau wrote:
Je l'ai!
Mes salutations.
Ça marche peut-être, mais à voir ta façon d'utiliser les tableaux à
deux dimensions, c'est un peu un coup de chance et on peut en déduire
que tu n'as pas compris comment les utiliser.
unsigned char *cinq[NRANGS][NCOLS];
*cinq[i*NCOLS + j] = malloc(strlen(s)+1);
Pourquoi écrire "*cinq[i*NCOLS + j] = ..." alors que cinq est un
tableau à deux dimensions. La bonne façon d'écrire serait :
"cinq[i][j] = ...".
Les pointeurs (chaînes de caractères ici) et les tableaux ayant
beaucoup d'analogies, tu fais des confusions. Avant de chercher à
faire des programmes "compliqués", utilise un tableau d'entiers où tu
n'auras pas besoin de malloc, remplis-le puis teste des parcours et
des affichages de ce tableau.
Ça marche peut-être, mais à voir ta façon d'utiliser les tableaux à deux dimensions, c'est un peu un coup de chance et on peut en déduire que tu n'as pas compris comment les utiliser.
unsigned char *cinq[NRANGS][NCOLS];
*cinq[i*NCOLS + j] = malloc(strlen(s)+1);
Pourquoi écrire "*cinq[i*NCOLS + j] = ..." alors que cinq est un tableau à deux dimensions. La bonne façon d'écrire serait : "cinq[i][j] = ...".
Les pointeurs (chaînes de caractères ici) et les tableaux ayant beaucoup d'analogies, tu fais des confusions. Avant de chercher à faire des programmes "compliqués", utilise un tableau d'entiers où tu n'auras pas besoin de malloc, remplis-le puis teste des parcours et des affichages de ce tableau.
-- Gaël Tessier http://www.tessier-net.org
espie
In article <Wu3dh.68793$, Jean Pierre Daviau wrote:
Je l'ai! Mes salutations.
C'Útait une paisible rÚvolution. Tu Útais deux bonnes rÚpÚtitions.^
Alors, vous pouvez y aller... de vos critiques.
Bon, on va commencer par une simple. Qu'est-ce que tu fous avec des 'unsigned char', alors que tu es visiblement en train de manipuler des chaines de caracteres ? Ca s'appelle des 'char', chez moi.
In article <Wu3dh.68793$Cu4.1227484@wagner.videotron.net>,
Jean Pierre Daviau <Once@WasEno.ugh> wrote:
Je l'ai!
Mes salutations.
C'Útait une paisible rÚvolution. Tu Útais deux bonnes rÚpÚtitions.^
Alors, vous pouvez y aller... de vos critiques.
Bon, on va commencer par une simple. Qu'est-ce que tu fous avec
des 'unsigned char', alors que tu es visiblement en train de manipuler
des chaines de caracteres ? Ca s'appelle des 'char', chez moi.
In article <Wu3dh.68793$, Jean Pierre Daviau wrote:
Je l'ai! Mes salutations.
C'Útait une paisible rÚvolution. Tu Útais deux bonnes rÚpÚtitions.^
Alors, vous pouvez y aller... de vos critiques.
Bon, on va commencer par une simple. Qu'est-ce que tu fous avec des 'unsigned char', alors que tu es visiblement en train de manipuler des chaines de caracteres ? Ca s'appelle des 'char', chez moi.
Blaise Potard
while (*ligne1 != 'n') { k = 0; s = malloc(strchr(ligne1, '^') - ligne1); if (s) {
Que se passe-t-il si la chaine ligne1 ne contient pas le caractère '^' ? Es-tu certain que ça ne puisse jamais arriver ?
À ta place, je ferais plutôt:
size_t s_len; char * trouve = strchr(ligne1, '^'); if (trouve == NULL) {...} else { s_len = trouve - ligne1; s = malloc (s_len + 1); ...
(oui, ta chaîne s était trop courte d'un caractère).
?????? Je ne vois pas du tout ce que tu cherches à faire, mais à mon avis c'est une mauvaise idée. Peut-être veux-tu vérifier que ton pointeur a bien été alloué ? Dans ce cas, c'est
if (cinq[i][j] != NULL)
strcpy(*cinq[i*NCOLS + j], s);
Ah, c'est ça que tu voulais faire ? Tu pouvais te passer complètement de la chaine s en faisant directement un :
??????
Je ne vois pas du tout ce que tu cherches à faire, mais à mon avis c'est
une mauvaise idée. Peut-être veux-tu vérifier que ton pointeur a bien
été alloué ? Dans ce cas, c'est
if (cinq[i][j] != NULL)
strcpy(*cinq[i*NCOLS + j], s);
Ah, c'est ça que tu voulais faire ? Tu pouvais te passer complètement de
la chaine s en faisant directement un :
?????? Je ne vois pas du tout ce que tu cherches à faire, mais à mon avis c'est une mauvaise idée. Peut-être veux-tu vérifier que ton pointeur a bien été alloué ? Dans ce cas, c'est
if (cinq[i][j] != NULL)
strcpy(*cinq[i*NCOLS + j], s);
Ah, c'est ça que tu voulais faire ? Tu pouvais te passer complètement de la chaine s en faisant directement un :
Avec mes modifs, cette ligne devient ligne1 += s_len + 1;
free(s); }
Je te laisse corriger le reste du code en conséquence.
Jean Pierre Daviau
Ça marche peut-être, mais à voir ta façon d'utiliser les tableaux à deux dimensions, c'est un peu un coup de chance et on peut en déduire que tu n'as pas compris comment les utiliser. c'est très probable
Les pointeurs (chaînes de caractères ici) et les tableaux ayant beaucoup d'analogies, tu fais des confusions. Avant de chercher à faire des programmes "compliqués",
Celui- là me servira à quelque chose... sur mon ordi. Et puis, il n'est pas si compliqué. Et puis, si on recule à la moindre difficulté. Et puis peut-être as-tu raison...
Merci de ton attention.
Ça marche peut-être, mais à voir ta façon d'utiliser les tableaux à
deux dimensions, c'est un peu un coup de chance et on peut en déduire
que tu n'as pas compris comment les utiliser.
c'est très probable
Les pointeurs (chaînes de caractères ici) et les tableaux ayant
beaucoup d'analogies, tu fais des confusions. Avant de chercher à
faire des programmes "compliqués",
Celui- là me servira à quelque chose... sur mon ordi.
Et puis, il n'est pas si compliqué.
Et puis, si on recule à la moindre difficulté.
Et puis peut-être as-tu raison...
Ça marche peut-être, mais à voir ta façon d'utiliser les tableaux à deux dimensions, c'est un peu un coup de chance et on peut en déduire que tu n'as pas compris comment les utiliser. c'est très probable
Les pointeurs (chaînes de caractères ici) et les tableaux ayant beaucoup d'analogies, tu fais des confusions. Avant de chercher à faire des programmes "compliqués",
Celui- là me servira à quelque chose... sur mon ordi. Et puis, il n'est pas si compliqué. Et puis, si on recule à la moindre difficulté. Et puis peut-être as-tu raison...
Merci de ton attention.
Jean Pierre Daviau
À propos des unsigned: C:Documents and SettingsJean PierreBureau>test ±@£¢¤¬¦²³¼½¾ ?@úóñ¼ª???¢¥ J'ai trouvé comment enregistrer en western european 0850 avec EditPlus 2 et enlevé les unsigneds.
À ta place, je ferais plutôt: size_t s_len; char * trouve = strchr(ligne1, '^'); if (trouve == NULL) {...} else { s_len = trouve - ligne1; s = malloc (s_len + 1); oui
(oui, ta chaîne s était trop courte d'un caractère). Non, je remplaçais le ^ (s'il y en avait :-) par un
Pourquoi ne pas plutôt faire un strncpy(s, ligne1, s_len) ? s[s_len] = ' '; J'avais la tête prise par les caractères.
À propos des unsigned:
C:Documents and SettingsJean PierreBureau>test ±@£¢¤¬¦²³¼½¾
?@úóñ¼ª???¢¥
J'ai trouvé comment enregistrer en western european 0850 avec EditPlus 2 et
enlevé les unsigneds.
À ta place, je ferais plutôt:
size_t s_len;
char * trouve = strchr(ligne1, '^');
if (trouve == NULL) {...}
else {
s_len = trouve - ligne1;
s = malloc (s_len + 1);
oui
(oui, ta chaîne s était trop courte d'un caractère).
Non, je remplaçais le ^ (s'il y en avait :-) par un
Pourquoi ne pas plutôt faire un strncpy(s, ligne1, s_len) ?
s[s_len] = ' ';
J'avais la tête prise par les caractères.
À propos des unsigned: C:Documents and SettingsJean PierreBureau>test ±@£¢¤¬¦²³¼½¾ ?@úóñ¼ª???¢¥ J'ai trouvé comment enregistrer en western european 0850 avec EditPlus 2 et enlevé les unsigneds.
À ta place, je ferais plutôt: size_t s_len; char * trouve = strchr(ligne1, '^'); if (trouve == NULL) {...} else { s_len = trouve - ligne1; s = malloc (s_len + 1); oui
(oui, ta chaîne s était trop courte d'un caractère). Non, je remplaçais le ^ (s'il y en avait :-) par un
Pourquoi ne pas plutôt faire un strncpy(s, ligne1, s_len) ? s[s_len] = ' '; J'avais la tête prise par les caractères.
À propos des unsigned: C:Documents and SettingsJean PierreBureau>test ±@£¢¤¬¦²³¼½¾ ?@úóñ¼ª???¢¥ J'ai trouvé comment enregistrer en western european 0850 avec EditPlus 2 et enlevé les unsigneds.
Je comprend pas, mais je pense que ce n'est pas grave.
(oui, ta chaîne s était trop courte d'un caractère).
Non, je remplaçais le ^ (s'il y en avait :-) par un
Si si, je t'assure :-)
Ton strchr(ligne1, '^') te donnant la position du premier caractère '^', le s_len est donc *exactement* égal à la longueur du mot précédant le '^'. Il faut donc rajouter 1 pour avoir de la place pour le ' '. Tu peux essayer sur un example, pour voir.
cinq[i][j][s_len] = ' ';
C'est quoi ça [s_len] en troisième position.
cinq[i][j] est un char *, cinq[i][j][s_len] est le caractère d'indice s_len de cette chaîne. Il serait peut-être un peu plus propre d'écrire *(char[i][j] + s_len) mais je trouve que c'est moins clair, personnellement.
À propos des unsigned:
C:Documents and SettingsJean PierreBureau>test ±@£¢¤¬¦²³¼½¾
?@úóñ¼ª???¢¥
J'ai trouvé comment enregistrer en western european 0850 avec EditPlus 2 et
enlevé les unsigneds.
Je comprend pas, mais je pense que ce n'est pas grave.
(oui, ta chaîne s était trop courte d'un caractère).
Non, je remplaçais le ^ (s'il y en avait :-) par un
Si si, je t'assure :-)
Ton strchr(ligne1, '^') te donnant la position du premier caractère '^',
le s_len est donc *exactement* égal à la longueur du mot précédant le
'^'. Il faut donc rajouter 1 pour avoir de la place pour le ' '. Tu
peux essayer sur un example, pour voir.
cinq[i][j][s_len] = ' ';
C'est quoi ça [s_len] en troisième position.
cinq[i][j] est un char *, cinq[i][j][s_len] est le caractère d'indice
s_len de cette chaîne. Il serait peut-être un peu plus propre d'écrire
*(char[i][j] + s_len) mais je trouve que c'est moins clair,
personnellement.
À propos des unsigned: C:Documents and SettingsJean PierreBureau>test ±@£¢¤¬¦²³¼½¾ ?@úóñ¼ª???¢¥ J'ai trouvé comment enregistrer en western european 0850 avec EditPlus 2 et enlevé les unsigneds.
Je comprend pas, mais je pense que ce n'est pas grave.
(oui, ta chaîne s était trop courte d'un caractère).
Non, je remplaçais le ^ (s'il y en avait :-) par un
Si si, je t'assure :-)
Ton strchr(ligne1, '^') te donnant la position du premier caractère '^', le s_len est donc *exactement* égal à la longueur du mot précédant le '^'. Il faut donc rajouter 1 pour avoir de la place pour le ' '. Tu peux essayer sur un example, pour voir.
cinq[i][j][s_len] = ' ';
C'est quoi ça [s_len] en troisième position.
cinq[i][j] est un char *, cinq[i][j][s_len] est le caractère d'indice s_len de cette chaîne. Il serait peut-être un peu plus propre d'écrire *(char[i][j] + s_len) mais je trouve que c'est moins clair, personnellement.