为什么指向c-string中元素的指针不返回元素?

BnE*_*BnE 4 c++ string pointers c-strings

我试图理解指针在这里是如何工作的.该findTheChar功能搜索str该角色chr.如果chr找到,则返回指向str首次找到字符的指针,否则nullptr(未找到).我的问题是为什么函数打印"llo"而不是"l"?虽然我写的代码main返回"e"而不是"ello"

#include <iostream>
using namespace std;

const char* findTheChar(const char* str, char chr)
{
    while (*str != 0)
    {
        if (*str == chr)
            return str;
        str++;
    }
    return nullptr;
}

int main()
{
    char x[6] = "hello";
    char* ptr = x;
    while (*ptr != 0)
    {
        if (*ptr == x[1])
            cout << *ptr << endl; //returns e
            ptr++;
    }
    cout << findTheChar("hello", 'l') << endl; // returns llo
}
Run Code Online (Sandbox Code Playgroud)

Sto*_*ica 5

C字符串是由字符终止的字符缓冲区'\0'.传递它们只涉及将指针传递给第一个元素.

所有的库程序都知道它们可以从它们给出的地址开始读取字符,直到它们到达为止'\0'.由于这是怎样operator<<std::cout设计,它假定你传递一个C-string的起始地址.这是合同.

如果要打印单个字符,则需要取消引用该指针.