为什么行结束字符不包含在char *中?

时间:2018-01-27 11:43:43

标签: c++ char c-strings

函数TrimRight占用一行并删除末尾的所有空格。

void TrimRight(char *s) // input "somestring   " (3 spaces at the end)
{
    // Here s == "somestring   \0" and strlen(s) == 14
    int last = strlen(s) - 2;
    std::cout << "Last1: " << s[last] << std::endl; // Last == ' '
    while (s[last] == ' ')
    {
        --last;
    }
    std::cout << "Last2: " << s[last] << std::endl;  // Last == 'g'
    s[last + 1] = '\0';
    // Here s == "somestring" and strlen(s) == 10
}

问题是为什么在TrimRight之后s!=“somestring / 0”? 我正在使用MVS 2017.谢谢。

1 个答案:

答案 0 :(得分:1)

你想到TrimRight(s)后,s成为something\0

但是在TrimRight(s)函数中,while loop刚从最后一个索引传递。

通过意味着它没有删除whitespace\0

所以s不是something\0。它是something\0 \0因为&#34;只是传递&#34;。

enter image description here