Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

int N = (sizeof (argv[1])/sizeof(char))

25 réponses
Avatar
Québec
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

10 réponses

1 2 3
Avatar
Alexandre Bacquart
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));


== sizeof(argv[1]) / 1 == sizeof(char*) / 1

Autrement dit la taille d'un pointeur (un char* en l'occurence) sur ta
machine :

N= 4


Mouaip.


--
Tek

Avatar
Jacques Ichane
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 ?


---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.722 / Virus Database: 478 - Release Date: 18/07/2004

Avatar
Alexandre Bacquart
Jacques Ichane wrote:
sizeof d'une chaîne de caractères est censé donner quoi ? La même chose que
strlen ?


Non, il faisait un sizeof de pointeur. sizeof retourne une constante,
strlen calcule et retourne la taille d'une chaîne fournie par un pointeur.




---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.722 / Virus Database: 478 - Release Date: 18/07/2004





--
Tek

Avatar
Yves ROMAN

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) ?

Avatar
Yves ROMAN

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) ?

Avatar
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.

ex :

char *chaine1 = "blabla";
char chaine2[42] = "coucou";

sizeof chaine1 vaut 4 (chez moi, ça dépend de l'implémentation).
sizeof chaine2 vaut 42
sizeof "hello" vaut 6 (strlen("hello") vaut 5)
sizeof "helloworld" vaut 12 (strlen("helloworld") vaut toujours 5).



--
Richard


Avatar
Thierry Boudet
On 2004-07-28, Québec wrote:

int main (int argc, char *argv[]){
int N = (sizeof (argv[1])/sizeof(char));

N= 4

Bravo, bonne réponse de Jean-Pierre Liégeois,

notre sympathique lecteur de la Drôme...


--
_/°< coin--;

Avatar
Stephane Legras-Decussy
Québec a écrit dans le message :
mYPNc.5$
int N = (sizeof (argv[1])/sizeof(char));


on a dit un million de fois que sizeof(char)
vaut *TOUJOURS* 1 ....

ya pas des masses de trucs toujours vrais, autant les connaitre... :-)

Avatar
Emmanuel Delahaye
Québec wrote on 28/07/04 :
Bonjour aux par-ce-que,

Bureau>b.exe "Jean Pierre"

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"

Avatar
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

1 2 3