c - 在 C 中打印用循环填充的字符串?

标签 c arrays loops

我是 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();
}

最佳答案

  1. 您的“字符串”都没有null终止符,我写“字符串”,因为它们实际上不是字符串根据 string 的定义.

  2. 您的 i 变量始终为 0,只需使用简单的公式 ch - 'A' 即可给出正确的索引。

  3. 您的 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/

相关文章:

c - 如何将变量放在 SDCC 中的特定内存位置

c - 这个 O(n^4) 的算法是可以避免的吗?

c - 为什么我的 Fork 子进程不从管道读取?

c - 通过相互依赖和外部变量将 CUDA 代码与 C 代码链接起来

c - 为什么将第二个值放入此 C 结构体数组中会将第一个槽的值变成乱码?

java - 对象数组空指针异常

ruby-on-rails - 三列有序列表

android - 如何使用 Lua 和 Corona Labs SDK 中的循环使对象逐渐在我的屏幕上移动

java - 如果我的 Collection 中还没有某本书,如何将其添加到其中? (java)

c - C中检测int的逻辑