C++ 在C+;中使用此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<
#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