请问这个for循环为什么出不来?

int k = 0;
char alp[5];
char grp[5] = { '1','8','i','y','\0' };
printf("%d", grp[2]);
for (int i = 0; i < strlen(grp) - 1; i++)
{
    if ((grp[i] >= 48 && grp[i] <= 57) || (grp[i] >= 65 && grp[i] <= 90))
    {
        alp[k] = grp[i];
        k++;
    }
}
alp[strlen(alp)] = '\0';
printf("%d", grp[0]);
puts(alp);

return 0;

char alp[5];这里改成 char alp[5]={0};否则,在alp[strlen(alp)] = '\0';这句话中,strlen(alp)可能得不到正确的值。
因为char alp[5];这里没有给alp数组初始化,在不同的编译器中,处理方式不一样,有的编译器会自动把元素置0,有的编译器则是分配的随机值,所以,如果不给alp初始化,在alp[strlen(alp)] = '\0';这句话中,strlen(alp)可能得不到正确的值。

img

代码修改如下:

#include <stdio.h>
#include <string.h>
int main()
{
    int k = 0;
    char alp[5]={0};
    char grp[5] = { '1','8','i','y','\0' };
    printf("%d", grp[2]);
    for (int i = 0; i < strlen(grp) - 1; i++)
    {
        if ((grp[i] >= 48 && grp[i] <= 57) || (grp[i] >= 65 && grp[i] <= 90))
        {
            alp[k] = grp[i];
            k++;
        }
    }
    alp[strlen(alp)] = '\0';
    printf("%d", grp[0]);
    puts(alp);

    return 0;
}

有输出啊

img

你题目的解答代码如下:


#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main()
{
    int k = 0;
    char alp[5];
    char grp[5] = { '1','8','i','y','\0' };
    printf("%d ", grp[2]);
    for (int i = 0; i < strlen(grp); i++) //strlen(grp)取的长度不包含\0,不要 - 1
    {
        if ((grp[i] >= 48 && grp[i] <= 57) || (grp[i] >= 65 && grp[i] <= 90))
        {
            alp[k] = grp[i];
            k++;
        }
    }
    // alp[strlen(alp)] = '\0';
    alp[k] = '\0'; //应该是k
    printf("%d ", grp[0]);
    puts(alp);

    return 0;
}

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img