放置并进入C

Puts and Gets in c++

本文关键字:      更新时间:2023-10-16

我知道要做什么,但是我不了解此代码的含义。

int main(void) {
    char s[20];   
    gets(s); //Helloworld
    gets(s+2);//dog
    sort(s+1,s+7);
    puts(s+4);
}

您能帮我了解吗?

沿着这些行将其绘制在纸上。

首先,二十个非初始化元素:

| | | | | | | | | | | | | | | | | | | | |

gets(s)

|H|e|l|l|o|w|o|r|l|d|0| | | | | | | | | |

gets(s+2)

|H|e|d|o|g|0|o|r|l|d|0| | | | | | | | | |
     ^
     |
    s+2

sort(s+1, s+7)

|H|0|d|e|g|o|o|r|l|d|0| | | | | | | | | |
   ^           ^
   |           |
  s+1         s+7

puts(s+4)

|H|0|d|e|g|o|o|r|l|d|0| | | | | | | | | |
         ^
         |
        s+4 

关于代码的最好的话是它非常糟糕。幸运的是,它很短,但是很脆弱,无与伦比且容易出错。

但是,由于上一个并不是真正的答案,因此假设使用标准包含文件并"使用命名空间std";:

  • char s [20];

这声明了20个字符的数组,其目的是用无效的字符串填充它。如果某种程度上,字符串变大,您会遇到麻烦

  • 获取(s);//helloworld

这在stdin的字符串中读取。无法对大小进行检查。该评论假设它将在Helloworld中阅读,这应该适合

  • 获取(s 2);//dog

这是在stdin的第二个字符串中读取的,但是它将覆盖从第三个字符开始的上一个字符串。因此,如果写入评论,S将包含零终止的字符串" Hedog"。

  • 排序(s 1,s 7);

这将对从第二个字符到第七个字符的ASCII值进行分类。使用给定的输入,我们已经遇到了一个问题,即零字符处于第六位,因此它将是排序字符的一部分,因此将是第二位,因此零终止的字符串将为" H"。

  • put(s 4);

从第五位上写下弦,因此直到读取" helloworld"的零字符,但随后被覆盖和半排名。当然,输入可以是任何东西,所以期待惊喜。

  gets(s); //Helloworld   -- reads a string from keyboard to s
  gets(s+2);//dog         -- reads a string from keyboard to s started with char 2
  sort(s+1,s+7);          -- sorts s in interval [1, 7]
  puts(s+4);              -- writes to console s from char 4

获取(s);//helloworld-> s = helloworld

获取(s 2);//dog-> s = he dog

排序(s 1,s 7); -> S = H DEGO

put(s 4); -> console = hdeg o

相关文章:
  • 没有找到相关文章