Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+;中使用此C样式字符串可以获得一些帮助吗+;?_C++ - Fatal编程技术网

C++ 在C+;中使用此C样式字符串可以获得一些帮助吗+;?

C++ 在C+;中使用此C样式字符串可以获得一些帮助吗+;?,c++,C++,我试图理解非托管代码。我来自C语言的背景,我在C++中玩了一点点。 为什么这是代码: #include <iostream> using namespace std; int main() { char s[] = "sizeme"; cout << sizeof(s); int i = 0; while(i<sizeof(s)) { cout<<"\nindex "<<i<

我试图理解非托管代码。我来自C语言的背景,我在C++中玩了一点点。 为什么这是代码:

#include <iostream>

using namespace std;

int main()
{
    char s[] = "sizeme";

    cout << sizeof(s);

    int i = 0;
    while(i<sizeof(s))
    {
        cout<<"\nindex "<<i<<":"<<s[i];
        i++;
    }
    return 0;
}

sizeof()不应该返回6吗?

是“nul terminated”,这意味着在末尾还有一个值为0x00的附加字节。当您调用
sizeof(s)
时,您将获得整个缓冲区的大小,包括nul终止符。调用strlen(s)时,得到的是缓冲区中包含的字符串长度,不包括nul


请注意,如果修改
s
的内容并将nul终止符放在末尾以外的某个位置,则
sizeof(s)
仍将为7(因为这是
s
声明方式的静态属性),但
strlen(s)
可能会稍小一些(因为这是在运行时计算的)。

这是由于以下事实,C字符串包含值
0
(或
'\0'
)作为标记字符串结尾的最后一个字符。

否,C中的所有字符串均以空字符(ascii 0)结尾。所以
s
实际上是7个字节

s i z e m e \0

s是7个字节,6个用于字符串,1个用于空终止。

+1用于一个写得非常好、格式非常好的问题,即使它很简单,您可能已经能够在搜索中找到答案。如果每个发布新手问题的人都做得这么好,那么看到重复的问题也不会让人沮丧。
s i z e m e \0