gpt4 book ai didi

c - 这个字符串怎么能打印出来

转载 作者:行者123 更新时间:2023-11-30 19:09:36 25 4
gpt4 key购买 nike

我是新手。我正在数组中做一些实验。我试过这个

#include <stdio.h>

int main()
{
char arr[7] = "Network";
printf("%s\n", arr);
return 0;
}

输出:网络

我也尝试过这个,

int main()
{
char arr[7] = "Its time to work";
printf("%s\n", arr);
return 0;
}

警告:字符数组的初始化字符串太长[默认启用]

输出:** 它的时间

我有这个版本的 gcc -vgcc版本4.8.4(Ubuntu 4.8.4-2ubuntu1~14.04.3)

为什么一开始没有警告?如果在第二种情况下“%s”最后附加“\0”,为什么它给我输出“网络”而不是垃圾或“网络”?

最佳答案

在两个示例中,您都使用字符串文字作为字符数组的初始值设定项。尽管它是隐式的,但字符串文字始终附加空字符。

C99,n1570 (downloadable here) 第 6.4.5 节字符串文字,第 7 段6 说:

In translation phase 7, a byte or code of value zero is appended to each multibyte character sequence that results from a string literal or literals.

此外,(归功于 @Olaf)6.7.9 初始化第 7 段。 14 它说:

An array of character type may be initialized by a character string literal or UTF−8 string literal, optionally enclosed in braces. Successive bytes of the string literal (including the terminating null character if there is room or if the array is of unknown size) initialize the elements of the array. [emphasis mine]

要点是,尽管不明显,字符串文字初始值设定项 "Network" 包含 8 个字符,而变量 arr 只有 7 个字符:

"Network"   ->  |N|e|t|w|o|r|k|0|  
char arr[7] -> | | | | | | | |

因为你的陈述:

 char arr[7] = "Network";

arr中没有提供足够的空间,它创建一个char数组,它不创建字符串。将其用作字符串将导致 undefined behavior 。即任何事情都可能发生。

关于c - 这个字符串怎么能打印出来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42960353/

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