int main (int argc, char *argv[]){ int N = (sizeof (argv[1])/sizeof(char));
N= 4
Tu espérais calculer quoi avec cette formule (dont le résultat est indépendant des arguments passés, puisqu'il s'agit d'une constante) ?
Richard Delorme
Jacques Ichane wrote:
Bonjour aux par-ce-que,
Bureau>b.exe "Jean Pierre"
int main (int argc, char *argv[]){ int N = (sizeof (argv[1])/sizeof(char));
N= 4
Jean
sizeof d'une chaîne de caractères est censé donner quoi ? La même chose que strlen ?
- sizeof d'un tableau de char donne le nombre d'élément du tableau. - sizeof d'un pointeur vers une chaine de caractère donne la taille du pointeur. - sizeof d'une chaine littérale donne le nombre de caractère de la chaine, y compris le(s) caractère(s) ' ' qu'elle contient.
int main (int argc, char *argv[]){
int N = (sizeof (argv[1])/sizeof(char));
N= 4
Jean
sizeof d'une chaîne de caractères est censé donner quoi ? La même chose que
strlen ?
- sizeof d'un tableau de char donne le nombre d'élément du tableau.
- sizeof d'un pointeur vers une chaine de caractère donne la taille du
pointeur.
- sizeof d'une chaine littérale donne le nombre de caractère de la
chaine, y compris le(s) caractère(s) ' ' qu'elle contient.
int main (int argc, char *argv[]){ int N = (sizeof (argv[1])/sizeof(char));
N= 4
Jean
sizeof d'une chaîne de caractères est censé donner quoi ? La même chose que strlen ?
- sizeof d'un tableau de char donne le nombre d'élément du tableau. - sizeof d'un pointeur vers une chaine de caractère donne la taille du pointeur. - sizeof d'une chaine littérale donne le nombre de caractère de la chaine, y compris le(s) caractère(s) ' ' qu'elle contient.
int main (int argc, char *argv[]){ int N = (sizeof (argv[1])/sizeof(char));
Ce qui est une façon compliquée d'écrire
int N = sizeof argv[1];
N= 4
Tes pointeurs font 4 bytes, OK. Et ta question est ?
-- Emmanuel The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html
"C is a sharp tool"
Horst Kraemer
"Québec" wrote:
Bonjour aux par-ce-que,
Bureau>b.exe "Jean Pierre"
int main (int argc, char *argv[]){ int N = (sizeof (argv[1])/sizeof(char));
N= 4
La déclaration
char * argv[]
veut dire "tableau de pointeur vers char". Qaund il s'agit d'une déclaration d'un paramètre d'une fonction et le type d'un paramètres est déclaré "tableau de ..." cette déclaration est transformée automatiquement en "tableau ...". Donc la déclaration est équivalente à
char **argv
et argv *est* un pointeur de pointeur de char. Donc argv[1] est un pointeur vers char. La taille d'un pointeur est la taille d'un pointeur et ne dépend pas des données vers lesquelles il pointe.
Si la déclaration était
char (*argv) [8]
alors il s'agissait d'un pointeur vers tableau de 8 char et l'expression argv[1] serait un tableau de 8 char et le résultat de
sizeof argv[1]
serait 8 parce qu'un tableau de 8 char comprend 8 char et l'unité de sizeof est "char".
Ce qui t'intéresse dans ton exemple est peut-etre la taille de la chaine vers laquelle argv[1] pointe:
strlen(argv[1])
-- Horst
"Québec" <Once@WasEno.ugh> wrote:
Bonjour aux par-ce-que,
Bureau>b.exe "Jean Pierre"
int main (int argc, char *argv[]){
int N = (sizeof (argv[1])/sizeof(char));
N= 4
La déclaration
char * argv[]
veut dire "tableau de pointeur vers char". Qaund il s'agit d'une
déclaration d'un paramètre d'une fonction et le type d'un paramètres
est déclaré "tableau de ..." cette déclaration est transformée
automatiquement en "tableau ...". Donc la déclaration est équivalente
à
char **argv
et argv *est* un pointeur de pointeur de char. Donc argv[1] est un
pointeur vers char. La taille d'un pointeur est la taille d'un
pointeur et ne dépend pas des données vers lesquelles il pointe.
Si la déclaration était
char (*argv) [8]
alors il s'agissait d'un pointeur vers tableau de 8 char et
l'expression argv[1] serait un tableau de 8 char et le résultat de
sizeof argv[1]
serait 8 parce qu'un tableau de 8 char comprend 8 char et l'unité de
sizeof est "char".
Ce qui t'intéresse dans ton exemple est peut-etre la taille de la
chaine vers laquelle argv[1] pointe:
int main (int argc, char *argv[]){ int N = (sizeof (argv[1])/sizeof(char));
N= 4
La déclaration
char * argv[]
veut dire "tableau de pointeur vers char". Qaund il s'agit d'une déclaration d'un paramètre d'une fonction et le type d'un paramètres est déclaré "tableau de ..." cette déclaration est transformée automatiquement en "tableau ...". Donc la déclaration est équivalente à
char **argv
et argv *est* un pointeur de pointeur de char. Donc argv[1] est un pointeur vers char. La taille d'un pointeur est la taille d'un pointeur et ne dépend pas des données vers lesquelles il pointe.
Si la déclaration était
char (*argv) [8]
alors il s'agissait d'un pointeur vers tableau de 8 char et l'expression argv[1] serait un tableau de 8 char et le résultat de
sizeof argv[1]
serait 8 parce qu'un tableau de 8 char comprend 8 char et l'unité de sizeof est "char".
Ce qui t'intéresse dans ton exemple est peut-etre la taille de la chaine vers laquelle argv[1] pointe: