【问题标题】:Unknown bug in printing string in c在 c 中打印字符串的未知错误
【发布时间】:2014-01-21 23:50:41
【问题描述】:

我正在编写用于检查输入的代码 现在我需要做的是检查用户是否输入了“read_set a”...... 但不管我想做什么..

如果输入为 : "read_seta,123" ,则显示无BUGS
如果输入为 : "read_set a,123" ,则会显示 BUGS

代码是:

     input[100];
     scanf("%s",input);
     printf("%s",input);
        read_set(input)

int read_set(char input[]){
    printf("%c\n\n",input[8]);
    printf("%s",input);
}

first printf 中,我希望代码显示 space " " 但它没有 而是每次都打印奇怪的字符(每次 random 字符)

而且 second printf 根本不显示

有什么问题?

【问题讨论】:

  • 您的 scanf 正在读取“read_set”,当您尝试访问索引 10 时,它是未定义的。 IE。您一次只能读入 1 个字符串,如果要读入“read_set a”,则需要读入一个字符串,然后读入一个字符并将其附加到字符串中,并在其前加一个空格。即使这样,也只有 10 个字符,所以访问索引 10 仍然是未定义的(索引 9 将包含 'a')
  • @WaseemGabour 确实,您的问题是scanf() 没有按照您的想法执行。一般来说,你应该完全避免那个可怕的功能。要逐行获取用户输入,请考虑改用fgets()
  • @H2CO3 工作完美,谢谢:)

标签: c string input


【解决方案1】:
change scanf("%s", input); to scanf("%14c", input);  

现在的问题是 scanf 需要 14 个字符,否则它需要返回。
因此,对于输入字符串“read_set a,123”,它可以正常工作,但可以说“read_set
它还需要 6 个字符(包括 '\n')。

变态

【讨论】:

    【解决方案2】:

    "%s" 不保存空格。

    scanf("%s",input); 只能读取 "read_set a,123""read_set"

    阅读整行推荐:

    fgets(input, sizeof input, stdin);
    // To trim trailing \n
    size_t len = strlen(input);
    if (len > 0 && input[len-1] == '\n') input[--len] = '\0';
    printf("%s", input);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-25
      • 2018-05-04
      • 2016-06-26
      • 2018-11-26
      • 2016-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多