C中的二维字符串

时间:2017-01-05 11:09:06

标签: c arrays multidimensional-array c-strings

几周前我刚开始学习C语,关注了一本关于C的书。每一章都有一些练习,我可以解释为什么我的代码没有#&# 39;工作。分配是从用户那里获得一些字符串,这些字符串将进入一个二维数组。然后,向后打印每个字符串。

例如,

用户将输入以下字词:sleephellogreat

,输出结果为:peelsollehtaerg

它必须是一个二维数组(这是本章的内容)。

这是我的代码:

#include <stdio.h>

int main()

{
    char string[5][6]; 
    int i, j;

    for(i=0; i<5; i++)
    {
        printf("please enter a string:\n");
        scanf("%s", &string[i]);
    }

    printf("\n");

    for(i=0; i<5; i++)
    {
        for(j=6; j<=0; j--)
        {
            printf("%c", string[i][j]);
        }
        printf("\n");
        j=6;

    }

return 0;

}

提前谢谢!

2 个答案:

答案 0 :(得分:1)

%s需要char *您发送char (*)[6]

scanf("%s", &string[i]); =&gt; scanf("%5s", string[i]);

您的for循环j错误,您打印nul终止字节。在这种情况下,你应该使用while循环在C中更加惯用。

for (i = 0; i < 5; i++) {
    j = 5;
    while (j-- > 0) {
        printf("%c", string[i][j]);
    }
    printf("\n");
}

答案 1 :(得分:1)

我假设你代码崩溃了。您只使用具有五个字符的字符串。然后你打印出七个字符(索引6,5,4,3,2,1,0)。那太多了。第一个(从索引6开始)导致从数组外部读取,这导致未定义的行为。然后,当您按字符打印我们的字符时,您不应该打印出scanf添加到字符串的结束零。它不是可见的角色。在本练习中,您可以将其替换为空格,例如。

另外,请确保不要添加超过五个字符的任何字符串。这也会导致未定义的行为,很可能是崩溃。你可以通过使用%5s替换%s来使scanf最多只读取五个字符串来避免这种情况。即使这样,如果输入字符串少于五个字符,你就会遇到问题或打印出垃圾,所以你不应该将j设置为数组的长度,而是设置为字符串的长度(减去1)。

j=strlen(string)-1;

可能还有其他问题,但先解决这些问题,看看会发生什么。