首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >strcmp混淆

strcmp混淆
EN

Stack Overflow用户
提问于 2012-05-30 23:25:31
回答 7查看 1K关注 0票数 0

据我所知,标准的strcmp函数如下所示:

代码语言:javascript
复制
int strcmp(const char* string1, const char* string2)
{
    while(*pString1++ == *pString2++)
    {
        if(*pString1 == 0) return 0;
    }
    return *pString1 - pString2;
}

我的问题是,这不会增加传递给strcmp的指针吗?在下面的示例中,它似乎会丢弃指针,并导致发生无效的事情。

代码语言:javascript
复制
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();}

对不起,我只是感到困惑,因为似乎如果我将一个指针传入strcmp,我不应该期望该指针突然包含一个空字符串。看起来strcmp应该接受const char* const。我是不是完全误解了什么?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-05-30 23:29:28

你的误解是:参数是通过值(copy)传递的,但你似乎认为它们是通过引用传递的。

您可以通过将参数声明为strcmp的引用来获得预期的行为,如下所示:

代码语言:javascript
复制
int strcmp(const char*& string1, const char*& string2)
票数 8
EN

Stack Overflow用户

发布于 2012-05-30 23:27:59

不是,指针string1string2是函数的本地指针(通过值传递)。对它们所做的任何更改对调用者都不可见。

票数 4
EN

Stack Overflow用户

发布于 2012-05-30 23:28:12

指针本身是通过值传递的,所以虽然它是指向某个对象的指针,但更改它只会更改局部声明。

为了能够从函数的内部作用域修改指针本身,您需要有一个指向char的指针。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10819376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档