gpt4 book ai didi

c - 在 C 中打印字符数组

转载 作者:太空宇宙 更新时间:2023-11-04 00:57:37 27 4
gpt4 key购买 nike

void main(){
char s[10];

s[1]='a';
s[6]='4';
for(int i=0;i<10;i++)
printf("%c",s[i]);
}

我有这个简单的程序。它给出以下输出:

@aO   4

如果我把上面的代码改成:

void main(){
char s[10];

s[1]='a';
s[6]='4';
for(int i=0;i<10;i++)
printf("%c",s[i]);

printf("\n");

for(int i=0;i<10;i++)
printf("%c",s[i]);

}

输出更改为:

@a@ 4
@a@ 4

在'a'和'@'之间实际上有2个包含4个数字的立方体(立方体的每个象限中有1个数字)但由于某种原因它们没有显示。请在代码块中尝试上面的代码如果我对你没有意义。

我期望第一个代码的输出是 a 4。为什么不是这样?另外,为什么当我添加更多代码时输出会发生变化?我期望输出是:

a    4
a 4

最佳答案

您必须了解程序背后的行为。因此,当您加载程序时,它会在内存中获得 N 字节,并且 N 字节会被多次重复使用并且不会被删除。因此,在第一个实例中,您的程序已将一些数据加载到 s[0] 稍后将驻留的位置,而在第二个实例中,也将某些数据加载到 s[2] 的位置。这就是为什么在这两种情况下您会得到不同的输出。

所以总结一下:你的数组不会初始化为 0 除非你自己做,它被赋予了以前被相同的人使用过的内存程序。在你必须这样做之前,按照指示去做:

char s[10] = "          ";
....

我看到的另一件事是,在 C/C++/Java 中,数组索引从 0 开始,您不希望在 a 之前有空格。所以如果你这样做:

char s[4];

s[1] = 'a';
s[2] = 'b';
s[3] = '\0';

print ("%s", s);

你可能会得到:

@ab

@ 出现是因为在 s[0] 所在的内存位置,您作为程序员没有编写任何内容。

请注意,每次在 C 中有字符串时,您都必须以 '\0' 字符结束它。

关于c - 在 C 中打印字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53924881/

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