这个数组的长度是多少?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
的长度为100char
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