对于C中的sizeof(x)VS while([x]!=';\0';)
我只是想知道使用对于C中的sizeof(x)VS while([x]!=';\0';),c,pointers,char,sizeof,c-strings,C,Pointers,Char,Sizeof,C Strings,我只是想知道使用 for(i=0;i
for(i=0;i
及
while(argv[1][i]!='\0')
我只是好奇,什么也找不到
(目的是
putchar
字符的每个字符*)这两种情况有本质的区别
表达式argv[1]
是一个指针,其类型为char*
,通常占用4或8个字节,具体取决于使用的系统,该系统等于表达式sizeof(argv[1])/sizeof(argv[1][0])
的值或表达式sizeof(argv[1])
的值,因为sizeof(argv[1][0])
与sizeof(char)
相同,最后一个始终等于1
另一方面,指针可以指向比4或8个字符多得多(或更少)的字符串
但是,即使您将对声明的字符数组(而不是指针)应用sizeof
运算符,例如
char s[] = "Hello";
即使在这种情况下,循环的条件也会不同,这就是for循环
for(i = 0; i < sizeof( s ) / sizeof( s[0]); i++) {
遇到字符'\0'
时停止其迭代
这是一个演示程序,显示了差异。该程序输出符号的ASCII码
#include <stdio.h>
int main(void)
{
char s[] = "Hello";
for ( size_t i = 0; i < sizeof( s ) / sizeof( s[0]); i++ )
{
printf( "%d ", s[i] );
}
putchar( '\n' );
size_t i = 0;
while ( s[i] != '\0' )
{
printf( "%d ", s[i] );
++i;
}
putchar( '\n' );
return 0;
}
这两种情况有本质区别 表达式
argv[1]
是一个指针,其类型为char*
,通常占用4或8个字节,具体取决于使用的系统,该系统等于表达式sizeof(argv[1])/sizeof(argv[1][0])
的值或表达式sizeof(argv[1])
的值,因为sizeof(argv[1][0])
与sizeof(char)
相同,最后一个始终等于1
另一方面,指针可以指向比4或8个字符多得多(或更少)的字符串
但是,即使您将对声明的字符数组(而不是指针)应用sizeof
运算符,例如
char s[] = "Hello";
即使在这种情况下,循环的条件也会不同,这就是for循环
for(i = 0; i < sizeof( s ) / sizeof( s[0]); i++) {
遇到字符'\0'
时停止其迭代
这是一个演示程序,显示了差异。该程序输出符号的ASCII码
#include <stdio.h>
int main(void)
{
char s[] = "Hello";
for ( size_t i = 0; i < sizeof( s ) / sizeof( s[0]); i++ )
{
printf( "%d ", s[i] );
}
putchar( '\n' );
size_t i = 0;
while ( s[i] != '\0' )
{
printf( "%d ", s[i] );
++i;
}
putchar( '\n' );
return 0;
}
它们不是同一件事(尽管它们很接近) 第一个
for(i=0;i
指:
i
设置为0
sizeof(argv[1])/sizeof(argv[1][0])
的意思是strlen(argv[1])
,所以它的意思是
而i小于argv[1]的长度
这基本上和
inti=0;
而(argv[1][i++]!='\0')
有两个区别:
i
从未设置为0
i
从不递增(尽管在循环本身中它可能递增)
它们不是同一件事(尽管它们很接近) 第一个
for(i=0;i
指:
i
设置为0
sizeof(argv[1])/sizeof(argv[1][0])
的意思是strlen(argv[1])
,所以它的意思是
而i小于argv[1]的长度
这基本上和
inti=0;
而(argv[1][i++]!='\0')
有两个区别:
i
从未设置为0
i
从不递增(尽管在循环本身中它可能递增)
sizeof(argv[1])
是指针的大小。argc
告诉您数组的长度*argv[]
@WeatherVane看起来OP是在查找单个参数的长度,而不是参数的数量要获取argv[1]的长度
请使用strlen(argv[1])
您需要理解指针和数组之间的区别。如果从main()
获取argv
,它是指向指向(数组的)指针的指针,指向(数组的)char
argv[1]
是指针,sizeof argv[1]
将返回指针的大小,而不是数组。while(argv[1][i]!='\0')
与相同,而(argv[1][i])
sizeof(argv[1])
是指针的大小。argc
告诉您数组的长度*argv[]
@WeatherVane看起来OP是在寻找单个参数的长度,而不是它们的数量来获取argv[1]的长度
请使用strlen(argv[1])您需要了解指针和数组之间的区别。如果您从main()
中获得argv
,则它是指向(数组的)指针的指针,指向(数组的)char
argv[1]是指针,并且sizeof argv[1]
将返回指针的大小,而不是数组。while(argv[1][i]!='\0')
与while(argv[1][i])
sizeof(argv[1])/sizeof(argv[1][0])
并不意味着strlen strlen(argv[1])
。前者是指针的大小除以char
argv[1][0]
,这通常与从argv[1]
开始的字符串长度不同,因为指针的大小与传递给程序的字符串无关。sizeof(argv[1])/sizeof(argv[1][0])
并不意味着strlen(argv[1])
。前者是指针argv[1]
的大小除以字符的大小<