gpt4 book ai didi

c++ - 为什么 char* 总是和字符串的 len 一起传递给 FUNCTION

转载 作者:太空宇宙 更新时间:2023-11-03 10:43:12 26 4
gpt4 key购买 nike

我最近在学习c/c++,但我不明白两者之间的区别

int a(chat* str,int len)
{
cout<<str<<len;
}

int a(char* str)
{
cout<<str<<strlen(str);
}

最佳答案

当您传递没有长度的 char* 时,您如何知道要处理多少个元素? char* 表示指向字符的指针。当您传递一个指针时,您不知道(也无法找出)为该指针分配了多少内存(如果有的话)。

这就是为什么 C 字符串使用空值终止(它们以 '\0' 字符结尾),因此您可以通过迭代指针来检测它们的长度。因此,如果你想在不给出分配内存长度的情况下使用指针,你需要遵守一些约定。但总的来说,例如传递缓冲区时,您不应期待任何结束信号字符,因此在这种情况下您需要传递长度,否则可能会导致读/写越界。

对于您的特定示例,只要您仅在 C 字符串上使用您的函数,您就可以只传递一个指针,因为 strlen(str) 使用这种计数约定,直到遇到 '\0'

缓冲区溢出是最困惑和噩梦般的编程错误之一,可能导致严重的安全问题。这就是为什么您应该尝试(只要可能)使用 C++ 标准库中的 std::string 而不是 C 风格的 char* 字符串。

关于c++ - 为什么 char* 总是和字符串的 len 一起传递给 FUNCTION,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29879587/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com