gpt4 book ai didi

c - 为什么 printf 在输出时连接两个变量,但前提是未指定字符串长度?

转载 作者:行者123 更新时间:2023-11-30 18:17:12 26 4
gpt4 key购买 nike

有人知道为什么 printf 在输出时连接这两个变量,但前提是没有指定字符串的长度吗?

#include <stdio.h>
int main(){
char myname[3] = "tim";
char myage[3] = "ten";
printf("myname is:%s \n", myname);
printf("myage is:%s \n", myage);
}

我的名字是:蒂姆

我的年龄是:tentim

...但是当我没有指定字符串的长度时,它似乎按照我的预期工作,而无需打印两个变量。

#include <stdio.h>
int main(){
char myname[] = "tim";
char myage[] = "ten";
printf("myname is:%s \n", myname);
printf("myage is:%s \n", myage);
}

我的名字是:蒂姆

我的年龄是:十

最佳答案

您声明数组的大小为 3,但您尝试在其中存储 4 元素。由于只有 3 元素有足够的内存,因此没有为最后一个元素(字符串 null 终止符 \0)留下任何内存,因此您的字符数组没有空终止符。
请注意,c 中的字符数组应以 null 结尾,以便您可以使用 printf 打印它们。这是因为 printf 只是遍历字符数组,直到遇到 \0。在您的第一个示例中,由于数组从未终止 \0 ,因此您最终得到的是未定义的行为。(实际上,pintf 将继续打印,直到遇到 \0 并且在读取过程中超出了分配给数组的内存范围)

在第二种情况下,由于您没有自己指定大小,因此会根据字符串中指定的元素数量选择适当的大小,即:4 并且 \0 终止符已就位。

关于c - 为什么 printf 在输出时连接两个变量,但前提是未指定字符串长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16132598/

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