关于C++的束缚的一堆问题
A bunch of questions about C++'s cstring
关于 cstrings,我有几个问题想澄清一下:
1) 初始化:当按如下方式声明字符数组时,C++是否会自动将其定义为 cstring?还是(我相信)一系列字符?
char a[10];
换句话说,这是一个仅包含空终止符 ('\0') 的字符数组还是一个空字符数组?
2)当直接处理cstring的索引(i.e. a[i] = ch+1;
)时,cstring是否自动处理其空终止符,还是程序员有责任为它留出空间并插入它?
示例代码(这是我认为正确的答案):
char a[10];
int i = 0;
cin.get(ch);
while(ch != 'n' || i < 9) {
a[i] = ch;
counter++;
cin.get(ch);
}
a[i] = ' '; //either the last index(9)
//or the one right after the
//last input will be set to ' '
3)当使用<cstring>
库(如strncpy,strncat等)时,它是否处理了空终止符?例:
char myCstring[] = "I am a cstring"; //size of 15 (including ' ' at i == 14)
strncpy(myCstring, "I am NOT a string object", 14);
这会导致以下数组吗?
| I | | a | m | | N | O | T | | a | | s | t | r | ' ' |
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
最后:
char myCstring[] = "I am a cstring"; //size of 15 (including ' ' at i == 14)
strncpy(myCstring, "I'ma cstring", 14);
这会导致以下数组吗?
| I | ' | m | a | | c | s | t | r | i | n | g | ' ' |x|x|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
对不起,弄得一团糟。
1)它是一个chars
数组,通常是8位整数。
2) 不,它被视为一个数组 - 一切的工作方式与整数数组的工作方式完全相同。
3)许多人认为strncpy
不安全 - 它确实在字符串末尾添加了"\0"字符,但在字符串被截断时不会,类似于您的情况。生成的数组如下所示:
| I | | a | m | | N | O | T | | a | | s | t | r | ' ' |
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
但是,如果您传递了大小的15
,则尾随的"\0"将不存在,它之所以存在,只是因为函数被告知数组已短 1 个字符结束。如果将sizeof(myCstring)
传递为大小,则输出将有所不同:
| I | | a | m | | N | O | T | | a | | s | t | r | i |
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
请注意缺少尾随的"\0",这可能会导致在尝试读取字符串时出现分段错误(但在某些情况下不必这样做,这使得调试更加困难)。
4) 是的,如第 3 点所述。
相关文章:
- 如何使用结构和指针推动和弹出一堆双打
- 如何改进一堆在已知值范围内评估变量的 else-if 条件?
- 当我在结构中包含多个数组时,我的程序会跳过一堆代码
- 在共享指针的值中调用 std::swap 调用一堆构造函数和析构函数
- 使用带有.lib和一堆.dll和.h文件的Python CFFI
- 用 c++ 编写一堆类似的 if 语句的漂亮方法
- 当我尝试编译程序时,我遇到了一堆错误,例如:'std::max':找不到匹配的重载函数
- Swig C++ to python:编译一堆.cpp和.h文件
- template元编程:将一堆模板参数相乘
- 在.NET中存储一堆恒定值的最佳方法
- 我的一堆函数出现"undefined reference"错误,我不知道为什么
- 制作一堆 int 数组
- 为什么glut.h会在CodeBlocks中弹出一堆未定义的引用
- 更换一堆std ::矢量条目
- 在Windows下编译程序会给出一堆"error: template with C linkage"报告
- C++将字符从静态数组复制到动态数组会添加一堆随机元素
- 如何创建一堆多维数组
- 如何在Linux中使用Makefile一次编译一堆测试C++文件
- 如何在一堆数字中找到一个不同的值
- 关于C++的束缚的一堆问题