C printf是否用空字符终止每个字符串?

C printf是否用空字符终止每个字符串?,c,C,我们有这样的声明- printf(“你好世界”); printf是否在给定字符串中的“d”之后附加空字符?定义字符串时,例如“hello world”,默认情况下以空结尾。printf除了自己的打印处理之外,不做任何与null终止相关的事情。它只接受char*作为输入。在您的示例中,“Hello World”是临时字符串,在传递到printf之前已经以null结尾。如果传递的字符串不是以null结尾的,则行为是未定义的 定义字符串时,例如“hello world”,默认情况下以null结尾。pr

我们有这样的声明- printf(“你好世界”);
printf是否在给定字符串中的“d”之后附加空字符?

定义字符串时,例如“hello world”,默认情况下以空结尾。printf除了自己的打印处理之外,不做任何与null终止相关的事情。它只接受char*作为输入。在您的示例中,“Hello World”是临时字符串,在传递到printf之前已经以null结尾。如果传递的字符串不是以null结尾的,则行为是未定义的

定义字符串时,例如“hello world”,默认情况下以null结尾。printf除了自己的打印处理之外,不做任何与null终止相关的事情。它只接受char*作为输入。在您的示例中,“Hello World”是临时字符串,在传递到printf之前已经以null结尾。如果传递的字符串不是以null结尾的,则行为是未定义的

当你写作时

printf("xyz");
实际上,您正在将一个由三个字符和一个空终止符组成的字符串传递给
printf

printf("xyz");
// is equivalent to
static const char xyz[] = { 'x', 'y', 'z', 0 };
printf(xyz);
两个
printf
s具有相同的效果:它们将字符x、y和z写入控制台。空终止符未写入。

写入时

printf("xyz");
实际上,您正在将一个由三个字符和一个空终止符组成的字符串传递给
printf

printf("xyz");
// is equivalent to
static const char xyz[] = { 'x', 'y', 'z', 0 };
printf(xyz);
两个
printf
s具有相同的效果:它们将字符x、y和z写入控制台。空终止符未写入。

请尝试以下操作:

#include <stdio.h>

int main()
{
    char string0[] = {'a', 'b', 'c'};
    char string1[] = {'a', 'b', 'c','\0'};
    printf("%s", string0);
    puts("");
    printf("%s", string1);
    return 0;
}
printf()
不会将
'\0'
附加到字符串。它不会对要输出的字符串进行任何更改,因为它的任务是“打印”,而不是“修改”相反,是空字符告诉
printf()
字符串的结尾在哪里。

尝试以下方法:

#include <stdio.h>

int main()
{
    char string0[] = {'a', 'b', 'c'};
    char string1[] = {'a', 'b', 'c','\0'};
    printf("%s", string0);
    puts("");
    printf("%s", string1);
    return 0;
}

printf()
不会将
'\0'
附加到字符串。它不会对要输出的字符串进行任何更改,因为它的任务是“打印”,而不是“修改”相反,是空字符告诉
printf()
字符串的结尾在哪里。

否,
printf
在任何情况下都不会这样做。否,
printf
在任何情况下都不会这样做。