CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C]Envoyer un String dans une fonction ?

tesseracte
tesseracte
Niveau 7
20 décembre 2012 à 18:13:06

Merci :(

Mais j'ai appris, et c'est juste que je n'ai vu aucun exemple d'envois de chaîne de caractère dans une fonction !
Mais finalement tu as raison de me rappeler qu'une chaîne de caractère n'est ni plus ni moins qu'un Tableau . ( j'avais pas oublié, mais ça fait du bien de le réentendre :) )

je me demandais juste si il y avait une petite différence de la syntaxe, mais c'est en fait, quasi trivial .

:)

Et je ne cherchais pas des info sur "chaine de caractère en C" mais directement sur l'envoie d'elles même dans les fonctions ...

Nightmarez
Nightmarez
Niveau 9
22 décembre 2012 à 00:46:53

Utilises un pointeur, sauf si tu veux explicitement envoyer ton tableau par copie. Dans ce cas la, tu devras utiliser une taille fixe de tableau et adapter tes prototypes de fonctions, par exemple :

void fonction(char a[256]);

Fais bien attention, dans ce cas tu COPIES ta chaine, c'est a dire que si la chaine en question est declaree dans la fonction A, et que la fonction A appelle la fonction B en lui "donnant" sa chaine, si tu la modifie dans la fonction B, elle ne sera pas modifiee dans la fonction A.

chris_27
chris_27
Niveau 10
22 décembre 2012 à 12:08:22

void fonction(char a[256]); :d) non, Non, NON et ***NON***.

Ceci ne fait PAS ce qu'on pourrait penser. Le 256 est ignoré, et le "a[]" est équivalent au "*a".

Moralité, utiliser char* comme cela a été dit plusieurs fois déjà.

chris_27
chris_27
Niveau 10
22 décembre 2012 à 12:11:23

« Fais bien attention, dans ce cas tu COPIES ta chaine, c'est a dire que si la chaine en question est declaree dans la fonction A, et que la fonction A appelle la fonction B en lui "donnant" sa chaine, si tu la modifie dans la fonction B, elle ne sera pas modifiee dans la fonction A. »

Enfonçons le clou, parce que ceci est complétement faux !
Démonstration :

chris@totorJr:/tmp$ cat t.c

  1. include <stdio.h>

void f(char a[256]) {
    a[0] = a[1] = a[2] = a[3] = a[4] = 'X';
    printf("---> %s\n", a);
}

int main() {
char ch[256] = "Hello !";
printf("%s\n", ch);
f(ch);
printf("%s\n", ch);
return 0;
}

chris@totorJr:/tmp$ gcc t.c -Wall -Wextra
chris@totorJr:/tmp$ ./a.out
Hello !
---> XXXXX !
XXXXX !

Donc non, il n'y a pas de copies... cf le message précédent pour la logique de la chose.

chris_27
chris_27
Niveau 10
22 décembre 2012 à 12:12:26

PS: tiens, firefox a le défaut de transformer les espaces blanc insécables en simple espaces quand on fait du copier-coller. Du coup, mon code n'est pas indenté dans le main. :-(

saidalv3
saidalv3
Niveau 6
31 décembre 2012 à 13:38:58

void fonction(char *str)
{

}

int main(int ac, char **av)
{
char str[5] = "salut";
fonction (str);
}

// Je pense que sa doit etre comme sa

chris_27
chris_27
Niveau 10
31 décembre 2012 à 13:43:58

Attention, "salut" c'est 6 caractères, pas 5. :-)))

Calmacil
Calmacil
Niveau 47
31 décembre 2012 à 16:09:06

Mais utilise un malloc() plutôt qu'un tableau, ça te permettra d'en changer la taille par la suite.

chris_27
chris_27
Niveau 10
31 décembre 2012 à 16:12:50

C'est mal comprendre realloc que de dire ça. Un appel à realloc peut couter très cher, là où un tableau suffisamment grand fait l'affaire pour un coût nul.

saidalv3
saidalv3
Niveau 6
31 décembre 2012 à 21:49:23

Ouai j'ai oublier le '\0' mais c'est juste pour un exemple.

WhatUse
WhatUse
Niveau 10
01 janvier 2013 à 00:36:38

Chris_27 Voir le profil de Chris_27
Posté le 31 décembre 2012 à 16:12:50 Avertir un administrateur
C'est mal comprendre realloc que de dire ça. Un appel à realloc peut couter très cher, là où un tableau suffisamment grand fait l'affaire pour un coût nul.

peut couter très cher?on quoi? en temps de calcul?car je pense que parfois pour une chaine de taille trop vairable,il est utile de faire realloc et il vaut mieux ça,plutot que de bouffer plus d'1mo de RAM inutilement

godrik
godrik
Niveau 30
01 janvier 2013 à 01:06:10

il est utile de faire realloc et il vaut mieux ça,plutot que de bouffer plus d'1mo de RAM inutilement. Mais potentiellement ca fragmente la memoire virtuelle mechament.

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment