初始化char数组以容纳非null终止的字符串
Initialize char array to hold non-null-terminated string
我正在尝试用一个长字符串初始化char
数组。但是,我不希望它被NULL
终止。
此:
const char s[] = "The actual string is much longer then this...";
比这个更容易读(写):
const char s[] = {'T', 'h', 'e', ' ', 'a', 'c', 't', 'u', 'a', 'l', ' ', 's', ...};
但是前者得到CCD_ 3终止。有没有一种方法可以避免字符串文字上的NULL
?
这样做的原因是需要在开发过程中将固定大小长度的字符串密集地封装在内存中。
否。
字符串文字是一个C字符串,根据定义,它以null结尾。
要么忽略最后一个角色,重新审视你的要求(你为什么关心最后一个人物?!)要么……我不知道,其他的。也许用xxd
生成对象?
我会这么做:
size_t length = 45;
char s[] = "The actual string is much longer then this..";
s[length - 1] = ".";
看看你所拥有的在可读性和功能性之间有一个权衡,我认为你可以很容易地摆脱这一点,因为你可以而不是在"正常"初始化中避免NULL终止字符串。
如果我站在你的立场上,我会重新考虑我的方法并使用std::string。
否。如果您希望essy编写代码,请复制到第二个数组,但漏掉最后一个字符。在第一种情况下,您可以使用char指针来节省一些内存
如果不合适,将省略终止nul。由于你的字符串都是固定长度的,所以排列起来没有问题。例如:
#include <stdio.h>
char foo[3][4] = { "four", ".by." , "3333" };
int main(void)
{
for (int i = 0; i < 3; ++i)
{
for (int j = 0; j < 4; ++j)
putchar(foo[i][j]);
putchar('n');
}
}
没有办法使字符串文字不以null结尾。
但实际上,您想要密集地封装许多字符串,并且在开发时您知道字符串的大小和字符串。
假设:
"第一"
"第二"
"第三"
包装它们你可以安全地做:
char const s[] = "First""Second""Third";
如果您想打印或使用std字符串,您只需要保存长度并正确重建终止。不过这很容易。
作为额外的奖励,你从多余的指针中保存下来,你必须为每个人存储所需的字符串。
相关文章:
- 如何告诉字符串流忽略null终止字符
- 是否有一种安全的方法可以断言字符串视图是否以 null 终止?
- 自动截断和 null 终止缓冲区溢出中的字符串缓冲区
- 用户定义的字符串文字为字符串null终止
- 为什么具有单独字符的字符数组不像字符串文字那样以 null 终止符结尾?
- 我正在尝试计算 char 数组中的内容,直到 null 终止,但每次编译时,我都会得到一个比我的数组大的数字
- Node-ffi 绑定到 NULL 终止的 C 字符串数组,但得到“分段错误:11”
- 为什么一个指向char的C++指针在缺少null终止符的情况下充当字符串
- 为 fstream 添加 NULL 终止符
- Winsock2 tcp/ip-一些数据包被忽略,可能是由于前一个数据包的null终止符
- 解密字符串末尾的 NULL 终止符需要什么?
- 字符串中的Null终止
- 将 char 数组作为参数传递时,为什么索引中不包含 null 终止符?
- Delphi - 从 dll 调用转换(读取)C++ NULL 终止数组
- 如何捕获不包含 null 终止符的字符串的错误
- C++字符数组null终止符位置
- 字符串不是null终止错误
- 使用字符数组(非null终止)c/c++写入stdout
- 初始化char数组以容纳非null终止的字符串
- C++字符数组正确移动null终止符