gpt4 book ai didi

c - 为什么 printf 函数忽略后面的\0?

转载 作者:行者123 更新时间:2023-11-30 20:29:42 24 4
gpt4 key购买 nike

我对\0 具有的一些功能感到困惑。

我知道\0 是一个空字符,它是一个表示形式是字符串的术语。

int j;

j = printf("abcdef\0abcdefg\0");

printf("%d", j);

return 0;

当我尝试打印“abcdef\0abcdefg\0”时,C 只会打印字符串“abcdef”和“6”,而不是同时打印“abcdef”和“abcdefg”,总计为 13。为什么会发生这种情况?

最佳答案

“abcdef\0abcdefg\0”,字符串文字,实际上是一个staticconst(出于所有意图和目的)char 数组,因此它具有编译器维护的关联大小:

#include <stdio.h>
#define S "abcdef\0abcdefg\0"
//^string literals implicitly add a(nother) hidden \0 at the end
int main()
{
printf("%zu\n", sizeof(S)); //prints 16
}

但是数组在 C 中被特殊对待,并将它们作为参数传递给函数或几乎任何运算符,都会将它们转换为指向其第一个元素的指针。

指针没有关联的大小。

当您将 char const* 传递给函数(例如 printf)时,该函数仅接收一个数字 - 第一个元素的地址。

printf 和 C 中的大多数字符串函数获取大小的方式是对字符进行计数,直到第一个 '\0'

如果您将指针传递给 char 数组的第一个元素,该数组中显式嵌入了零,则对于一个函数来说,该函数会一直计数到第一个 '\0',字符串实际上以第一个 '\0' 结束。

关于c - 为什么 printf 函数忽略后面的\0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56825114/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com