En passant de la chaîne à une fonction en C - avec ou sans les pointeurs?
Quand je suis de passage d'une chaîne à la fonction j'utilise parfois
char *functionname(char *string name[256])
et parfois je l'utilise sans pointeurs (par exemple:
char functionname(char string[256])
Ma question est: quand dois-je besoin d'utiliser des pointeurs ? Souvent j'écris des programmes sans les pointeurs et il fonctionne,mais parfois ça ne marche pas.
- Qu'entendez-vous par "parfois ça marche et parfois ça ne marche pas"?
- Vous avez besoin de lire un tutoriel de base de mon ami.
- Merci de ne pas nous faire deviner. Afficher votre code. Assez pour nous faire comprendre le problème.
- Pour la première alternative, l'argument est un tableau de 256 chaînes. Au moins si vous fixer l'identificateur erreur (pas d'espace dans les noms)
- Non, car c'est le premier exemple est une erreur de syntaxe: il y a un identificateur.
- Ici un bon exemple sur la façon de faire des choses différentes avec des cordes et des pointeurs en C stackoverflow.com/a/46344713/5842403
Vous devez vous connecter pour publier un commentaire.
La convention acceptée de transmission C-strings à des fonctions est d'utiliser un pointeur:
Lorsque la fonction modifie la chaîne, vous devriez également passer dans la longueur:
Votre premier exemple:
passe un tableau de pointeurs sur des chaînes qui n'est pas ce dont vous avez besoin à tous.
Votre deuxième exemple:
passe un tableau de caractères. La taille du tableau, ici, n'a pas d'importance et le paramètre de décroissance à un pointeur de toute façon, donc c'est équivalent à:
Voir aussi cette question pour plus de détails sur des arguments de type tableau en C.
void function(char* name)
est donc applicable seulement quand il ne modifie pas le C-string? Ne serait-il pas logique de le déclarerconst
? Comme pour la plupart, vous êtes l'envoi d'un pointeur qui doit également être const, puisque vous ne serez pas changer le pointeur lui-même?char *functionname(char *string name[256])
est une erreur de syntaxe, pas de "passe un tableau de pointeurs".En supposant que vous avez voulu écrire
Ici de déclarer une fonction qui prend un tableau de 256 pointeurs vers
char
comme argument et retourne un pointeur vers char. Ici, sur l'autre main,De déclarer une fonction qui prend un tableau de 256
char
s comme argument et retourne unechar
.En d'autres termes, la première fonction prend un tableau de chaînes de caractères et retourne une chaîne de caractères, tandis que le second prend une chaîne de caractères et renvoie un caractère.
Un tableau est un pointeur. Il indique le début d'une séquence des "objets".
Si nous le faisons:
ìnt arr[10];
, puisarr
est un pointeur vers un emplacement de la mémoire, à partir de laquelle dix entiers suivre. Ils sont non initialisée, mais la mémoire est allouée. C'est exactement le même que le fait de faireint *arr = new int[10];
.sizeof(arr)
est différent pour un tableau et un pointeur. Etnew
est le C++, pas de C.