我可以得到一些帮助与这个C风格的字符串在c++
Can I get some assistance with this C style string in 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<<":"<<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终止。
相关文章:
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 如何用符合C++核心准则的代码替换C风格的字符串解析
- 如何按照 Google C++风格指南连接字符串文字?
- 将STD :: U8String复制到一个UTF8字符的C风格字符串中
- NULLPTR用于终止C风格的字符串
- 在班级中使用动态分配的C风格字符串,并带有复制和分配操作员,给出了意外的结果
- 使用PINVOKE编组LPWSTR的C风格数组,以托管字符串[]
- 无法将C风格的字符串推送到std::vector中
- 比较两个C风格字符串的正确函数是什么
- Perl风格的引号用于C++中的长字符串
- 对于c风格字符串,boost::spirit::qi和qi::alnum会导致模板编译错误
- c++中的C风格字符串和操作符重载
- 复制/连接动态分配的C风格字符串
- 基本的c风格字符串内存分配
- 如何判断c++模板类型是否为C风格字符串
- 将字符串转换为c风格字符串并检测空终止字符
- 使用c风格字符串字面值与构造未命名std::string对象的默认建议
- 从函数返回一个动态的C风格字符串
- 使用使用C风格字符串作为OUT参数的WinAPI函数
- 将c风格字符串传递给c++函数