为什么 char* 总是使用字符串的 len 传递给 FUNCTION

2023-12-13

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

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

and

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

当你通过时char*如果没有长度,你怎么知道要处理多少个元素?char*表示指向字符的指针。当您传递指针时,您不知道(也无法查明)为该指针分配了多少内存(如果有)。

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 char* 总是使用字符串的 len 传递给 FUNCTION 的相关文章

随机推荐