放置并进入C
Puts and Gets in c++
我知道要做什么,但是我不了解此代码的含义。
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
相关文章:
- 没有找到相关文章