【问题标题】:After getting input string from the user, output includes some other character(s)从用户获取输入字符串后,输出包括一些其他字符
【发布时间】:2015-05-29 06:03:39
【问题描述】:

我使一个字符矩阵减速

char strs[3][200] = {'\0'};

然后尝试只为第一行插入字符串

gets(strs[0]);

然后尝试打印所有行

printf("1) ");
puts(strs[0]);
printf("2) ");
puts(strs[1]);
printf("3) ");
puts(strs[2]);

结果是

1) ☺me input from the user
2) ☺
3) ☺

为什么结果中有一个“笑脸”☺?

【问题讨论】:

  • gets() 是危险的。请改用fgets()
  • 试试char strs[3][200] = {{'\0'}};。如果这不起作用,请提供MCVE。顺便说一句,您的输入和结果不匹配。
  • 你从哪里得到第四个输出?您的源文件似乎包含一些奇怪的字符。
  • 笑脸是 DOS 字符集中代码为 1 和 2 的字符。您是否正在尝试一些您没有向我们展示的花哨的东西,例如增加 strs[0][0]++ 或类似的?
  • @LPs: 初始化为strs[3][200] 后的strs[0] 是什么?

标签: c arrays string gets puts


【解决方案1】:

这行得通

#include <stdio.h>

int main()
{
    char str[3][200]={{'\0'},{'\0'},{'\0'}};

    fgets(str[0], 200, stdin);
    fgets(str[1], 200, stdin);
    fgets(str[2], 200, stdin);

    fputs(str[0], stdout);
    fputs(str[1], stdout);
    fputs(str[2], stdout);


    return 0;
}

在您的代码中,您仅初始化了第一个元素/字符串。然后当你的字符串中有垃圾时。

【讨论】:

  • 是的。我的错。在开始我的大脑之前需要咖啡:)
【解决方案2】:

看起来初始化时出了点问题。

试试这个

char options[2][100];

    options[0][0]='t';
    options[0][1]='e';    
    options[0][2]='s';
    options[0][3]='t';
    options[0][4]='1';
    options[0][5]='\0';

        printf("1) ");
        puts(options[0]);

输出将是:

1) test1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多