- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试打印多维数组的每个字符串,但在我看来,这些字符串没有 NUL 字符('\0'
)。
这是我使用的代码:
int main(void)
{
char test[3][2] = {'1', '2', '3', '4', '5', '6'};
printf("'%s'\n", test[0]);
printf("'%s'\n", test[1]);
printf("'%s'\n", test[2]);
return 0;
}
输出如下:
'123456'
'3456'
'56'
以这种方式声明它会产生相同的输出:
char test[3][2] = {"12", "34", "56"};
我必须自己在每个字符串后面放置一个 NUL 字符:
int main(void)
{
char test[3][3] = {'1', '2', 0, '3', '4', 0, '5', '6', 0};
printf("'%s'\n", test[0]);
printf("'%s'\n", test[1]);
printf("'%s'\n", test[2]);
return 0;
}
我也可以这样声明我的多维数组:
char test[3][3] = {{'1', '2'}, {'3', '4'}, {'5', '6'}};
输出:
'12'
'34'
'56'
这就是我所知道的:声明字符串时不需要在其末尾声明 NULL 终止字符。 str[3] = "123"
将分配 4 个内存槽,而不是 3 个,并将 '\0'
放在最后一个槽中。
以下链接证实了这一点:http://www.lysator.liu.se/c/c-faq/c-2.html
但是为什么我们需要在数组内部的字符串末尾手动实现 NUL 字符呢?
最佳答案
两者
char test1[3][2] = { "1", "3", "5" };
和
char test2[3][3] = { "12", "34", "56" };
会起作用的。
如果你用一对引号(")包围一个或多个字符,编译器就会知道你声明了一个字符串,并且它总是会在字符串末尾分配一个额外的'\0',消耗一个额外的字节内存空间。这就是为什么我们总是声明具有一个额外字节空间的数组用于已知用途,例如使用数组 char sz[6]
来存储字符串“hello”。
另一方面,如果用一对单引号 (') 括住一个字符,例如'a'
,它将被视为普通值,与int nNum
相同。 'a'
和 nNum
之间的唯一区别是内存消耗('a'
为 1 个字节,而 nNum
是 4 个字节)。我们可以将两者混合在一个计算中,而无需强制类型转换,例如
int nNum = 1;
nNum = nNum + 'a';
这会将 97(字符“a”的 ascii 值)添加到 nNum
本身,将 nNum
变成 98。如果继续打印 nNum
像这样:
printf("%c", nNum);
您将打印出字符'b'
。
关于c - 多维数组中的字符串没有终止 NUL 字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44110046/
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 7 年前。 Improve t
我有一个 const char* 指向十六进制格式的数据,我需要找到我正在检查的数据的长度 NUL-terminator 但是当\x00 出现时它检测到它作为 NUL 终止符返回不正确的长度。 我该如
如果 nul 永远不能成为 Windows 中的一个文件,那么如果使用对 nul 没有相同规则的操作系统在所有目录中创建一个名为“nul”的文件会怎么样。例如,如果在 CMD 中执行“echo 123
我知道 strlen() 不计算 NUL 终止字符。我真的知道这是事实。因此,这个问题并不是要问为什么 strlen() 可能“大概”不返回正确的字符串长度,这个问题已经在 StackOverfl
虽然 CStr 通常用于 FFI,但我正在读取 &[u8],它以 NUL 结尾并确保是有效的 UTF-8,所以没有需要检查。 但是 NUL 终止符不一定在切片的末尾。将此作为 &str 获取的好方法是
虽然 CStr 通常用于 FFI,但我正在读取 &[u8],它以 NUL 结尾并确保是有效的 UTF-8,所以没有需要检查。 但是 NUL 终止符不一定在切片的末尾。将此作为 &str 获取的好方法是
我正在使用 Java BufferedWriter 逐行写入文件。问题是,当我写完文件时,它在整个文件中显示“nul”。 我不认为问题出在我正在写的内容上,因为我用System.out.print仔细
我正在使用 R 使用 fread 读取一个文件,该文件包含许多列和行。该文件如下所示: 1_17118 1_18353 1_21882 1_21955 1_22054 Ind0001 -1
c89 海合会 (海湾合作委员会) 4.6.3 你好, 我在 *search = '\0' 上得到一个堆栈转储;我认为可以用 nul 终止一个字符串。 char *ptr_name = "hello@
这个问题在这里已经有了答案: NUL undeclared- first use in this function (4 个答案) 关闭 8 年前。 char word[5]={"fayed"};
我曾经使用以下函数写入很多不同的文件 using (FileStream fs = new FileStream(Settings.PsLog, FileMode.Truncate, System.S
我正在编写一个下载器,它将 url 拆分为多个部分并使用线程下载,可能我不会使用“join”,因为 join = 无法流式传输(如果所有线程未完成,则无法写入文件) 但是问题是 f.seek 和 wr
这是我服务器端的方法: void send_err(int socket_fd, char *msg) { /// To send an error message (`ERR`).
我需要创建一个将标准错误流重定向到某个文件的新进程。创建子进程的代码没有可用的控制台,因此在某些情况下 GetStdHandle(any) 将返回 0。子进程将出于某种原因尝试复制其所有标准 IO 句
我的 Notepad++ 中有这样的字符 当我尝试复制整行时,我实际上正在复制所有内容,直到“NUL”: File:1 我想做的就是替换那些空的,什么都没有,这样我就可以复制我的整行。也许有任何关键字
我正在通过 Java 中的 UDP 接收带有字节数组的数据包。我知道最大可能的字节大小,但我不知道当前接收的大小。 如果我从这个字节数组创建一个 String 实例,那么该字符串在有用的有效负载之后将
来自 the web我知道 C 包含 NUL 关键字。 编译时出现错误 NUL undeclared first use in this function' 我的代码片段: for (;;) {
#include #include int main() { char x[] = "Happy birthday to You"; char y[25]; char z[
我看到了here如果它不是 NULL 终止的,则不可能使用 strlen 找出 (unsigned char *) 字符串长度,因为 strlen 函数将遍历字符串但不会找到任何 '\0',因此运行-
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我是一名优秀的程序员,十分优秀!