OVH Cloud OVH Cloud

transmettre chaines de caracteres en C-ANSI

74 réponses
Avatar
Salut à tous, je souhaiterais transmettre un tableau de chaines de
caracteres d'une fonction à une autre. comment faire ?

Merci d'avance
Nico

PS : si je suis sur le mauvais forum, merci de m'en indiquer un qui
correspondrait mieux à ma question. :-)

10 réponses

Avatar
Vincent Burel
"Pierre Maurette" wrote in message
news:425042c2$0$11982$
Vincent Burel a écrit :
[...]
> ha ben si ca plante à l'exécution, y'a pas de secret, ca dépend de l'OS,


si
> ca dépendait du compilo il donnerai une erreur sur la ligne qui accède


au
> données constantes avant même le linkage de l'executable.
Non. Puisque l'exemple que je vous ai donné concernait deux compilos
(Borland bcc 5.6 et gcc 3.2) sous le même OS et même le même IDE.



oui, mais demandez à gcc de faire une compilation sous dos et éxécutez le
sous DOS, ca ne plantera pas. avec Borland ca ne plante pas car certainement
qu'il ne place pas les constante en mémoire protégé read-only.

VB
Avatar
Vincent Burel
"Arnaud Debaene" wrote in message
news:42503da2$0$11814$
Vincent Burel wrote:
Norme C ISO/IEC 9899 (C99) :
6.2.5/20 : "An array type describes a contiguously allocated nonempty set


of
objects with a particular member object type, called the element type."



oui, très bien de recopier de l'anglais mais en quoi cette jolie phrase
répond à l'une ou l'autre de mes interrogations ?

Il y a certainement un grand lien entre tableau et pointeur en C, parce
qu'un tableau est converti ("decay" en anglais) en pointeur dans de


nombreux
cas : ca n'empêche pas la notion de tableau d'exister en C.



qqc aurait dit que la notion de tableau n'existe pas en "C", c'est à dire
que cela serait impossible dans ce langage, d'organiser des données sous
forme d'une suite ordonnée accessible par un index ? mais qui aurait dit ça
!? :-) soyons sérieux !

> Allez ! Prouvez nous que
> vous pouvez produire autre chose qu'un médiocre mot de petit bouffon
> de cour de ferme.
Cour de ferme? Pourquoi cour de ferme??



vous vous croyez suffisamment drole pour jouer dans meilleur endroit !? :-)

VB
Avatar
Vincent Burel
"Pierre Maurette" wrote in message
news:42503dcc$0$12980$
AMcD® a écrit :
[...]
>>ceci dit la clef de voute de votre démonstration, a Toi et Mr
>>Maurette,
>
>
Mais que le tableau soit un type en C
est une évidence qui ne mérite pas vraiment de développements. Que ce
soit un type merdique dont on aurait parfois envie de se passer, je veux
bien l'admettre.



si c'était un type comme un autre, on aurait pas de questions d'amateur
genre , comment passer une chaine de caractère (sous entendu un tableau de
caractères) à une fonction ? Et j'avoue que pour être passer du Pascal au
"C" que j'ai trouvé le type tableau quelque peu hors norme justement.

Bref, je ne sais pas si cela mérite développement, mais c'est un sujet qui
déchaine les passions et qui amène toujours des nouveautés à chaque fois
qu'il est relancé... c'est environ la quatrieme fois que je lance ce troll
en 5 ou 6 ans sur le usenet, on ne m'avait pas encore fait le coup de la
différence de déclaration de constant implicite. :-)

VB
Avatar
Pierre Maurette
Vincent Burel a écrit :
"Pierre Maurette" wrote in message


[...]
Non. Puisque l'exemple que je vous ai donné concernait deux compilos
(Borland bcc 5.6 et gcc 3.2) sous le même OS et même le même IDE.




oui, mais demandez à gcc de faire une compilation sous dos et éxécutez le
sous DOS, ca ne plantera pas. avec Borland ca ne plante pas car certainement
qu'il ne place pas les constante en mémoire protégé read-only.


C'est ce qui était écrit ailleurs.
DOS ou pas, on s'en tape. En revanche, pas de seg fault en mode non
protégé ? Bravo ! Quelle trouvaille ...
Votre argumentation devient boufonne. La suite sans moi.
--
Pierre
Avatar
Vincent Burel
"Pierre Maurette" wrote in message
news:42504f3a$0$26817$
Vincent Burel a écrit :
> "Pierre Maurette" wrote in message
[...]
>>Non. Puisque l'exemple que je vous ai donné concernait deux compilos
>>(Borland bcc 5.6 et gcc 3.2) sous le même OS et même le même IDE.
>
>
> oui, mais demandez à gcc de faire une compilation sous dos et éxécutez


le
> sous DOS, ca ne plantera pas. avec Borland ca ne plante pas car


certainement
> qu'il ne place pas les constante en mémoire protégé read-only.
C'est ce qui était écrit ailleurs.
DOS ou pas, on s'en tape. En revanche, pas de seg fault en mode non
protégé ? Bravo ! Quelle trouvaille ...
Votre argumentation devient boufonne. La suite sans moi.



vous avez l'air de croire que vos expériences prouvent qqc quant à la
manière dont sont déclarés les pointeur sur constante ... non, car je dis
que le résultat dépend d'autres facteurs. Puisque pour qu'il y crash a
l'execution sur un accès en écriture memoire, il faut que les 2 conditions
soit réunis :
1 - que le compilo considère la mémoire en question comme une mémoire
contenant des constantes donc assignable en mémoire read-only.
2 - que l'O/S propose des espace de mémoire read-only.

Je ne vois pas en quoi c'est une trouvaille, et et je ne vois pas en vertue
de quoi cet argumentation est bouffonne.

VB
Avatar
Cyrille Szymanski
On 2005-04-03, Vincent Burel wrote:
c'est environ la quatrieme fois que je lance ce troll en 5 ou 6 ans sur le
usenet



Eh ben, lancer des trolls aussi stériles que celui-là je sais pas s'il y a de
quoi être fier... Heureusement que ça peut limite passer pour un poisson
d'avril.

--
Cyrille Szymanski
Avatar
Pierre Maurette
Cyrille Szymanski a écrit :
On 2005-04-03, Vincent Burel wrote:

c'est environ la quatrieme fois que je lance ce troll en 5 ou 6 ans sur le
usenet




Eh ben, lancer des trolls aussi stériles que celui-là je sais pas s'il y a de
quoi être fier... Heureusement que ça peut limite passer pour un poisson
d'avril.


Ne rentrez pas dans son jeu du troll. Il a écrit deux énormes bêtises,
ce qui arrive à tout le monde, et ne veut pas en démordre, comme un
gamin dans une cour de récréation. Les deux sottises:

>> char ch1[] = "bonjour";
>> char* ch2 = "bonjour";
[...]
pas du tout , les 2 écritures sont équivalentes. et le compilateur
traduit l'une comme l'autre, exactement de la même manière. Ici ce sont
les pointeur ch1 et ch2 qu l'on ne peut pas modifier, mais l'on peut
faire ch1[2]=ch2[3]=0; sans problème.
[...]
le tableau n'est pas un type de variable en "C" c'est une macro très
pratique qui permet de déclarer du pointer auto-alloué. c'est tout.

--
Pierre
Avatar
AMcD®
Pierre Maurette wrote:

Ne rentrez pas dans son jeu du troll. Il a écrit deux énormes bêtises,
ce qui arrive à tout le monde, et ne veut pas en démordre, comme un
gamin dans une cour de récréation.



C'est vrai qu'il est un peu têtu notre VB. Allez, restons-en là. Remarque,
ce fil aura au moins eu le mérite de fournir une bonne révision de quelques
notions sur les pointeurs en C, ce que semblait avoir besoin le posteur
initial :-).

--
AMcD®

http://arnold.mcdonald.free.fr/
Avatar
Stephane Legras-Decussy
Vincent Burel a écrit dans le message :
42504c19$0$822$

qqc aurait dit que la notion de tableau n'existe pas en "C



ben oui, un certain V.B. ...

je cite : "y'a pas de tableau en "C" ..."

alors si c'est pour faire le cake en disant que "notion de tableau"
ne veut pas dire "tableau", je vois pas l'utilité à part t'enterrer dans ton
troll
pas très fin...
Avatar
Vincent Burel
"Pierre Maurette" wrote in message
news:4250677a$0$2972$
Cyrille Szymanski a écrit :
> On 2005-04-03, Vincent Burel wrote:
>
>>c'est environ la quatrieme fois que je lance ce troll en 5 ou 6 ans sur


le
>>usenet
>
>
> Eh ben, lancer des trolls aussi stériles que celui-là je sais pas s'il y


a de
> quoi être fier... Heureusement que ça peut limite passer pour un poisson
> d'avril.
Ne rentrez pas dans son jeu du troll. Il a écrit deux énormes bêtises,
ce qui arrive à tout le monde, et ne veut pas en démordre, comme un
gamin dans une cour de récréation. Les deux sottises:

>> char ch1[] = "bonjour";
>> char* ch2 = "bonjour";



ce que j'ai dit reste vrai sauf dans cette exemple tiré par les cheveux
puisque ici le 'C' dans le cas de ch2, fait comme si vous vouliez déclarer
une constante, alors même que vous ne l'avez pas spécifier par le mot clef
const.
c'est l'exception qui confirme la règle

l'équivalence tableau - pointeur reste valide, et d'aillurs largement
utilisé :

char ch1[]="bonjour";
char *lp;
lp=ch1
*(lp+3)=0;
lp[2]=0;

VB