为什么我不必取消引用 C 样式字符串?[复制]

Why don't I have to dereference a C style string? [duplicate]

提问人:Ammishaddai Boakye 提问时间:10/26/2023 更新时间:10/26/2023 访问量:67

问:

指针是保存内存地址的容器。您可以通过取消引用来访问正在保存的内存地址中的联系人。 在下面的代码中,您必须服从 为了使其值而没有未定义的行为。char chcout

#include <iostream>
void Log(const char* message)
{
    std::cout << *message << std::endl;
}

int main()
{
    char ch = 'a';
    Log(&ch);
    std::cin.get();
}

如果将 C 样式字符串作为函数的参数传入,为什么不取消引用 不会导致未定义的行为。 还有为什么参数说 char 但它接受一个字符串。const char* message

#include <iostream>
void Log(const char* message)
{
    std::cout << message << std::endl;
}

int main()
{
    Log("Hello");
    std::cin.get();
}
C++ C-字符串 取消引用 逐指针传递

评论

1赞 paddy 10/26/2023
未定义的行为源于以下事实:内存中没有紧跟在字符文本后面的保证 null 终止符。写入字符串时,输出流期望遇到值为零的字节,以便它知道已到达字符串的末尾。除非您分配的字符是(就像一个空字符串),否则 的行为将是未定义的。'\0'cout << &ch
1赞 user4581301 10/26/2023
给定指向 a 的指针,假设您要打印一个以 null 结尾的字符数组。它开始在给定地址上一个接一个地打印字符,并递增该地址,直到找到空字符。如果它没有找到那个空终止符,那就是 UB。给定一个单,它只是打印出那个char<<charchar
0赞 user4581301 10/26/2023
使用两个示例的输入对第一个示例进行简单演示:godbolt.org/z/qKv7s4r45Log
0赞 user4581301 10/26/2023
第二个的简单演示:godbolt.org/z/15ffTErMbLog
1赞 user4581301 10/26/2023
重要说明:不需要 .它需要指向 .这非常重要。const char* messagecharchar*

答: 暂无答案