为什么这段代码输错了?输出为5和9,不应该是5和4。 这是代码
int main
{
char a[10] ={'a','b','c','d','e'};
char c[] = {'q','t','y','t'};
cout<<strlen(c)<<endl<<strlen(a);
return 0;
}
答案 0 :(得分:7)
您有未定义的行为,因为您使用指向非空终止字符数组(strlen
)的指针调用c
。您需要传递以null结尾的字符串才能生效。这是一个示例,修复了该错误和其他一些错误,并包括所需的标题:
#include <iostream> // std:cout, std::endl
#include <cstring> // std::strlen
int main()
{
char a[10] ={'a','b','c','d','e'}; // OK, all remaining elements
// initialized to '\0'.
// Alternative: car a[10] = "abcde"
char c[] = {'q','t','y','t', '\0'}; // or char c[] = "qtyt";
std::cout << std::strlen(c) << std::endl;
std::cout << std::strlen(a) << std::endl;
}
答案 1 :(得分:2)
c
最后需要一个空字符才能使strlen
生效。
您可以使用
char c[N] = {'q','t','y','t'};
N
为5或更高。
或
char c[] = {'q','t','y','t', '\0'};
或
char c[] = "qtyt";
在c
的末尾添加空字符。