Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这个数组的长度是多少?c语言_C - Fatal编程技术网

这个数组的长度是多少?c语言

这个数组的长度是多少?c语言,c,C,我以为是九,但答案是四。有人能解释吗?谢谢strlen将在遇到空终止符时立即停止计数(因为C使用以空结尾的字符串,并且只希望在字符串末尾找到它们) 在第一个空终止符之前有四个字符,因此长度为4。strlen返回4,因为msg中的(第一个)字符串由\0在msg[4]处终止。但是,数组msg的长度为100chars,因为它是这样声明的。可能是您的 char msg[100] = {’C’,’P’,’R’,‘E’,‘\0’,‘2’,‘8’, ‘8’,‘\0’}; int my_length = 0xF

我以为是九,但答案是四。有人能解释吗?谢谢

strlen
将在遇到空终止符时立即停止计数(因为C使用以空结尾的字符串,并且只希望在字符串末尾找到它们)


在第一个空终止符之前有四个字符,因此长度为4。

strlen
返回4,因为
msg
中的(第一个)字符串由
\0
msg[4]
处终止。但是,数组
msg
的长度为100
char
s,因为它是这样声明的。

可能是您的

char msg[100] = {’C’,’P’,’R’,‘E’,‘\0’,‘2’,‘8’, ‘8’,‘\0’};
int my_length = 0xFFFFFFFF;
my_length = strlen(msg);
你想要什么

char msg[100] = {’C’,’P’,’R’,‘E’,‘\0’,‘2’,‘8’, ‘8’,‘\0’};

(很明显:
CPRE0288
),因此二进制
0
(而不是0的字符表示形式,即
'0'
)过早地完成字符串

不能假定strlen的返回值表示数组的大小

strlen
将获取指向字符串开头的指针,并在查找空终止符时递增指针;一旦找到,它将返回计数器(即,在找到null之前的增量数)

您声明
msg
的长度为100,但在数组中仅填充了9个元素<代码>大小(msg)将为100

你真的在问“我怎样才能知道一个数组中初始化了多少个值”?这真的没有答案。

请记住,在C语言中,字符串只是一个字符值序列,后跟一个零值终止符。字符串存储在
char
(或
wchar\u t
宽字符串)数组中,但并非每个
char
(或
wchar\u t
)数组都是字符串。要存储长度为
N
个字符的字符串,需要至少包含
N+1
元素的数组来说明终止符


strlen
返回字符串中从指定地址开始到零结束符的字符数

要获取
msg
数组的大小(字节),请使用
sizeof
运算符:

char msg[100] = {’C’,’P’,’R’,‘E’,‘0’,‘2’,‘8’, ‘8’,‘\0’};
在本例中,实际上是在一个数组中存储两个字符串(
“CPRE”
“288”

msg
数组的大小为100(由声明给出)

msg[0]
开始的字符串
“CPRE”
的长度为4,因为数组的第五个元素中有一个零终止符(
'\0'==0


msg[5]
开始的字符串
“288”
的长度为3,因为在数组的第九个元素中有另一个零终止符

这个问题似乎在某种程度上是一样的:数组的大小是100。您正在询问字符串的长度。这三行都不是您的问题。你对斯特伦一无所知。这就是问题所在。谁告诉过你“\0”及其用法的?C库函数size\t strlen(const char*str)计算字符串str的长度,最大为,但不包括终止的空字符
\0
是终止的空字符,因此
strlen(msg)
等于4。
看起来像智能引号,而不是
不是。一个是键入0,另一个是键入“\0”,最后一个是您敲击键盘4次。所以不,没有输入错误….
msg
填充了100个字节,其中前9个字节在初始值设定项中显式给出,但其余的都初始化为0。是的,但是OP的声明,他希望结果是9,这让我觉得他在问“我如何找出有多少数组元素被显式初始化?”,这不是我们用C代码可以发现的——如果他在显式初始化的变量中有一堆尾随的零呢?
char msg[100] = {'C','P','R','E','\0','2','8','8','\0'};    
size_t my_length = strlen( msg );
size_t my_size = sizeof msg;

if ( my_length >= my_size )
  // whoopsie