【问题标题】:Why am i getting garbage in for loop using string array, gets and puts?为什么我使用字符串数组、gets 和 puts 在 for 循环中得到垃圾?
【发布时间】:2023-03-15 14:59:01
【问题描述】:

当我输入 3 个字符串时,puts 函数不会打印它们。它们包含垃圾。

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

int main ()
{
    char para[20][3];
    int x;

    for(x=0; x<3; x++)
    {
      gets(para[x]);
      fflush(stdin);        
    }

    for(x=0; x<3; x++)
      puts(para[x]);

    return 0;
}

【问题讨论】:

  • 试试char para[3][20];
  • 1. gets 不再存在(自 C11 起)。 2. 假设你有一个古老的实现,其中gets 可用,你不能超过 2 个字符,因为每次调用没有空间(这就是你应该永远使用gets!的原因)。
  • 你需要做的,就是把你的学习资源(老师或书本)拿去用火烧掉。然后得到一个更好的。
  • @Adder,是的,但是二维数组包含相同数量的字符,对吧?所以这不应该是一个问题。诚然,字符串可以被截断,但是垃圾?没有。

标签: c for-loop garbage gets puts


【解决方案1】:
fflush(stdin);   

是未定义的行为。它应该是传递给fflush 的一个输出或更新流。这,你所做的可能会导致一些奇怪的正常行为。

gets 已弃用且不打算使用。请改用fgets。您应该能够输入 2 字符和 \n 并显示数组大小。也许你的意思是para[3][20]gets 对缓冲区溢出没有安全性。那就是有fgets的形式,指定你想读的字符数。

【讨论】:

    最近更新 更多