我是 C 语言新手,正在尝试了解打印字符串和数组的单个元素。
在主函数中,我创建了一个包含 5 个字符的字符数组,并且能够打印该字符串。我还可以打印数组的 1 个元素。这一切都运行良好。
然后,我创建了一个函数,该函数具有一个 for 循环,用于填充具有 26 个可用槽的数组,并且想要执行相同的操作,打印整个字符串,然后只打印其中的单个元素。
当我的程序执行时,它应该打印: 你好 哦 ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ (这应该打印两次,一次用于 for 循环,然后当我尝试打印字符串时打印一次)
但是,当我这次尝试打印字符时,我遇到了错误,我能看到的唯一区别是我初始化数组的方式。我不明白其中的区别以及它为何会破裂。这与 for 循环的范围有关吗?我还尝试将 char 数组设为静态,但这也不起作用。 谁能帮忙解决这个问题吗?
这是我的代码
我是 C 语言新手,正在尝试了解打印字符串和数组的单个元素。
在主函数中,我创建了一个包含 5 个字符的字符数组,并且能够打印该字符串。我还可以打印数组的 1 个元素。这一切都运行良好。
然后,我创建了一个函数,该函数具有一个 for 循环,用于填充具有 26 个可用槽的数组,并且想要执行相同的操作,打印整个字符串,然后只打印其中的单个元素。
当我的程序执行时,它应该打印: 你好 哦 ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ (这应该打印两次,一次用于 for 循环,然后当我尝试打印字符串时打印一次)
但是,当我这次尝试打印字符时,我遇到了错误,我能看到的唯一区别是我初始化数组的方式。我不明白其中的区别以及它为何会破裂。这与 for 循环的范围有关吗?我还尝试将 char 数组设为静态,但这也不起作用。 谁能帮忙解决这个问题吗?
void mystring()
{
char s[26];
for(char ch = 'A'; ch < 'Z'; ch++)
{
int i = 0;
s[i] = ch;
printf("%c", s[i]);
i++;
}
printf("\n%s\n", s);
printf("%c", s[2]);
}
int main()
{
char mystr[5] = "Hello";
printf("%s\n", mystr);
printf("%c\n", mystr[4]);
mystring();
}
最佳答案
您的“字符串”都没有
null
终止符,我写“字符串”,因为它们实际上不是字符串根据 c 中 string 的定义.您的
i
变量始终为0
,只需使用简单的公式ch - 'A'
即可给出正确的索引。您的
char mystr[5] = "hello";
空间不足,您还需要为终止'\0'
分配空间。
要修复您的代码,您可以这样做
char s[27];
for (int ch = 'A'; ch <= 'Z'; ++ch) {
s[ch - 'A'] = ch;
}
s[26] = '\0';
并且,
char mystr[6] = "hello";
关于c - 在 C 中打印用循环填充的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46131583/