strlen 在循环中给出分段错误

strlen gives segmentation fault in loop

关于 hackerrank 问题,我需要获取字符串中元素的数量, 如何在不出现分段错误的情况下让 strlen 工作

已经搜索并得到了类似的结果,包括告诉放置“\0” 在字符串的末尾,但我不知道它是如何工作的

int main() {

    int n,c;
    char s[1024];
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        scanf("%s", s);
        c=strlen(s);
        for(int j=0;j<c;j+=2)
        {
            printf("%s",s[j]);
        }
        printf(" ");
        for(int k=1;k<c;k+=2)
        {
            printf("%s",s[k]);
        }

    }


    return 0;
}

请向我解释如何在此使用 strlen 或任何其他替代方法(如 isspace)或计算字符数的代码

这两行:

printf("%s",s[j]);
...
printf("%s",s[k]);

正在将字符打印为字符串。相反,这样做:

printf("%c",s[j]);
...
printf("%c",s[k]);

此外,为避免缓冲区溢出,您应该这样做:

scanf("%1023s", s);

而不是这个:

scanf("%s", s);

包含修复的完整代码(包括将 main 声明为 int main(void)):

int main(void) {
    int n,c;
    char s[1024];
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        scanf("%1023s", s);
        c=strlen(s);
        for(int j=0;j<c;j+=2)
        {
            printf("%s", &s[j]);
        }
        printf(" ");
        for(int k=1;k<c;k+=2)
        {
            printf("%s", &s[k]);
        }

    }

    return 0;
}