gpt4 book ai didi

C编程: Array prints two characters on its own

转载 作者:行者123 更新时间:2023-12-01 09:01:46 24 4
gpt4 key购买 nike

我正在尝试打印一个 2 个字符的字符串。这是该代码的一部分。

char arraytwo[3]; 
// 2 characters
for (i = 'a'; i <= 'z'; i++)
{
arraytwo[0] = i;
for (j = 'a'; j <= 'z'; j++)
{
arraytwo[1] = j;
printf("%s\n", arraytwo);
}
}

我得到的输出是这样的。出于某种原因,它会在每次迭代结束时不断添加“AZ”。我错过了什么?

aaAZ
abAZ
acAZ
adAZ
aeAZ
afAZ
agAZ
ahAZ
aiAZ
ajAZ
akAZ

最佳答案

您缺少的是 string 的定义,根据定义,它必须以 null 结尾。

引用 C11,第 7.1.1 章,(强调我的)

A string is a contiguous sequence of characters terminated by and including the first null character. [....]

在你的例子中,对于 arraytwo

  • 它是自动存储的,没有显式初始化。
  • 您没有手动终止它。

因此,从技术上讲,arraytwo 不是 字符串

在这种用法中,作为 %s 格式说明符的参数,越界访问发生在搜索 null 终止符时,这会导致 undefined behavior .

同时引用第 §7.21.6.1 章

s

If no l length modifier is present, the argument shall be a pointer to the initial element of an array of character type.280) Characters from the array are written up to (but not including) the terminating null character. [....]

解决方案:

  • 要么将数组元素初始化为 0,类似于 char arraytwo[3] = {0};
  • 或者,手动终止数组,如 arraytwo[2] = '\0';

在将数组用作字符串之前。

关于C编程: Array prints two characters on its own,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43731045/

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