Mic*_*ney 0 c++ string char strcmp
据我所知,标准strcmp函数看起来像这样:
int strcmp(const char* string1, const char* string2)
{
while(*pString1++ == *pString2++)
{
if(*pString1 == 0) return 0;
}
return *pString1 - pString2;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,这不会增加传递给strcmp的指针吗?在下面的示例中,它似乎会丢弃指针并导致无效的事情发生.
const char* string1 = "blah";
const char* string2 = "blah";
const char* string3 = "blah";
if(strcmp(string1, string2) {doSomething();}
// Won't this make string1 = "" because it incremented the pointer to the end?
else if (strcmp(string1, string3) {doSomethingElse();}
Run Code Online (Sandbox Code Playgroud)
对不起,我只是感到困惑,因为看起来如果我将指针传递给strcmp,我不应该指望突然持有空字符串的指针.似乎strcmp应该采用const char*const.我完全误解了什么吗?
你的误解是这样的:参数是通过值(复制)传递的,但你似乎认为它们是通过引用传递的.
您可以通过将参数声明strcmp为引用来获得预期的行为,如下所示:
int strcmp(const char*& string1, const char*& string2)
Run Code Online (Sandbox Code Playgroud)