优化这段代码 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; bool ifBig(const char* a, const char* b) { return strcmp(a, b) > 0; } int main() { char a[100]; char b[100]; char c[100]; gets(a, 100); gets(b, 100); gets(c, 100); // 按字典序排序 if (ifBig(b, a)) swap(a, b); if (ifBig(c, a)) swap(a, c); if (ifBig(c, b)) swap(b, c); // 输出 cout << a << b << c << endl; return 0; }
时间: 2024-03-08 15:46:52 浏览: 66
C++常用的#include头文件总结
这段代码相比较之前的代码已经进行了很好的优化,但仍然存在以下问题:
1. 使用 gets 函数,这个函数已经不建议使用了,因为它无法保证输入的字符串长度不超过数组长度,容易造成缓冲区溢出漏洞。
2. 需要注意每个 gets 函数的第二个参数,即要读入的字符数量,应该与数组长度匹配,否则可能会造成缓冲区溢出。
为了进一步优化这段代码,可以将 gets 函数替换为更安全的 fgets 函数,同时将每个 fgets 函数的第二个参数修改为数组长度即可。修改后的代码如下:
```c++
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
bool ifBig(const char* a, const char* b) {
return strcmp(a, b) > 0;
}
int main() {
char a[100];
char b[100];
char c[100];
fgets(a, sizeof(a), stdin);
fgets(b, sizeof(b), stdin);
fgets(c, sizeof(c), stdin);
// 按字典序排序
if (ifBig(b, a)) swap(a, b);
if (ifBig(c, a)) swap(a, c);
if (ifBig(c, b)) swap(b, c);
// 输出
cout << a << b << c << endl;
return 0;
}
```
修改后的代码更加安全可靠,同时避免了缓冲区溢出漏洞的风险。
阅读全文