我可以得到一些帮助与这个C风格的字符串在c++

Can I get some assistance with this C style string in C++?

本文关键字:风格 字符串 c++ 帮助 我可以      更新时间:2023-10-16

我试图理解非托管代码。我有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;
}

打印出如下内容:

7
index 0:s
index 1:i
index 2:z
index 3:e
index 4:m
index 5:e
index 6:

? ?

sizeof()不应该返回6吗?

C字符串是" null终止"的,这意味着在末尾有一个值为0x00的额外字节。当您调用sizeof(s)时,您将获得整个缓冲区的大小,包括空终止符。当您调用strlen(s)时,您将获得缓冲区中包含的字符串的长度,不包括null。

请注意,如果您修改s的内容并在末尾以外的地方放置一个空终止符,那么sizeof(s)仍然是7(因为这是s声明的静态属性),但strlen(s)可能会少一些(因为这是在运行时计算的)。

不,C中的所有字符串都以空字符(ascii 0)结束,因此s实际上是7字节

s i z e m e 

这是由于c -string包含值0(或'')作为标记字符串结束的最后一个字符。

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