打印字符串填充循环在C?

我是C新手,并试图了解打印字符串和数组的单个元素。

在主函数中,我创建了一个由5个字符组成的字符数组,并且能够打印字符串。 我也能够打印数组的一个元素。 这一切工作正常。

然后我创建了一个函数,它有一个for循环来填充一个有26个可用插槽的数组,并且想要做同样的事情,打印整个字符串,然后打印它的单个元素。

当我的程序执行时,它应该打印:你好o ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ(这应该打印两次,for循环一次,然后一次当我尝试打印字符串时)C

但是,当我尝试打印这些字符时,我遇到了错误,唯一的区别是我能看到的是我初始化数组的方式。 我不明白它们之间的差别以及它为什么会突破。 这与for循环的范围有关吗? 我也试着让char数组变成静态的,但那也不起作用。 有人能帮忙吗?

这是我的代码

我是C新手,并试图了解打印字符串和数组的单个元素。

在主函数中,我创建了一个由5个字符组成的字符数组,并且能够打印字符串。 我也能够打印数组的一个元素。 这一切工作正常。

然后我创建了一个函数,它有一个for循环来填充一个有26个可用插槽的数组,并且想要做同样的事情,打印整个字符串,然后打印它的单个元素。

当我的程序执行时,它应该打印:你好o ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ(这应该打印两次,for循环一次,然后一次当我尝试打印字符串时)C

但是,当我尝试打印这些字符时,我遇到了错误,唯一的区别是我能看到的是我初始化数组的方式。 我不明白它们之间的差别以及它为什么会突破。 这与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%sn", s);
    printf("%c", s[2]);

}

int main()
{
    char mystr[5] = "Hello";
    printf("%sn", mystr);
    printf("%cn", mystr[4]);

    mystring();
}

  • 对于你的“字符串”没有null终止符,我写“字符串”,因为它们实际上是根据c中字符串定义的非字符串。

  • 您的i变量始终为0 ,只需使用一个简单的公式ch - 'A'将提供正确的索引。

  • 你的char mystr[5] = "hello"; 没有足够的空间,您也需要为终止''分配空间。

  • 要修复你的代码,你可以这样做

    char s[27];
    for (int ch = 'A'; ch <= 'Z'; ++ch) {
        s[ch - 'A'] = ch;
    }
    s[26] = '';
    

    和,

    char mystr[6] = "hello";
    

    首先,你应该在for循环之外声明ifor否则i++命令不起作用,因为i将始终为0

    在C字符串中是带有char元素的数组,因此在这些容器的末尾应始终放置null字符。 因此,为了具体说明,你必须将数组的大小(27而不是26)和字符串的最终位置增加1 ,当你完成创建时, s[26] = '';


    目前,我看到的主要错误是

    for(char ch = 'A'; ch < 'Z'; ch++)
        {
            int i = 0;
            s[i] = ch;
            printf("%c", s[i]);
            i++;
        }
    

    你想把声明和初始化语句( int i = 0 )移到循环外部。 现在,它每次都会将i重置为0(实际上,可能会给出错误,因为它会尝试声明具有相同名称的变量)

    链接地址: http://www.djcxy.com/p/72159.html

    上一篇: printing strings populated with a loop in C?

    下一篇: Passing a string array to a function using pointers