我知道什么是放置和做什么,但我不明白这段代码的含义。
int main(void) {
char s[20];
gets(s); //Helloworld
gets(s+2);//dog
sort(s+1,s+7);
puts(s+4);
}
你能帮我理解一下吗?
答案 0 :(得分:1)
沿着这些方向在纸上画画。
首先,有20个未初始化的元素:
| | | | | | | | | | | | | | | | | | | | |
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
答案 1 :(得分:0)
关于代码的最好的说法是非常糟糕。幸运的是,它很短,但它很脆弱,不可维护且容易出错。
但是,由于上一个不是真正的答案,让我们通过代码,假设使用标准包含文件并使用“using namespace std;”:
这声明了一个包含20个字符的数组,目的是用一个以null结尾的字符串填充它。如果不知何故,字符串变大,你就麻烦了
这从stdin中读取一个字符串。不能对尺寸进行检查。该评论假定它将在Helloworld中阅读,该文章应该适合s。
这将从stdin中读取第二个字符串,但它将覆盖从第三个字符开始的前一个字符串。因此,如果注释是write,则s将包含以null结尾的字符串“Hedog”。
这将对从第二个字符到第七个字符断言ascii值的字符进行排序。使用给定的输入,我们已经有一个问题,即null字符位于第六个位置,因此它将是排序字符的一部分,因此将是第二个,因此以null结尾的字符串将为“H”。
从第五个位置写出字符串,直到为“Helloworld”读入的null-charater,然后覆盖并进行半分类。当然输入可以是任何东西,所以期待惊喜。
答案 2 :(得分:-2)
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); //狗 - > S =他的狗强>
排序(S + 1,S + 7); - > S =ħ的 DEGO 强>
放(S + 4); - >控制台= Hdeg的 0 强>