C++中的Cstrings

Nil*_*mar -1 c++ cstring

为什么这段代码输错了?输出是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;
}
Run Code Online (Sandbox Code Playgroud)

jua*_*nza 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: char 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;
}
Run Code Online (Sandbox Code Playgroud)