|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #include<iostream>
- #include<string>
- using namespace std;
- char select(char a[], char b[], char c[]);
- int main()
- {
- char a[20];
- char b[20];
- char c[20];
- cout << "输入三个国家的英文名:";
- cin >> a >> b >> c;
- cout << "按首字母排序最靠前的国家是:" << select(a, b, c);
- }
- char select(char a[], char b[], char c[])
- {
- char x[20];
- if (strcmp(a, b) > 0)
- {
- if (strcmp(b, c) > 0)
- strcpy(x, c);
- else
- strcpy(x, b);
- }
- else
- {
- if (strcmp(a, c) > 0)
- strcpy(x, c);
- else
- strcpy(x, a);
- }
- return x[20];
- }
复制代码
调试的时候编译器报错strcpy不安全,无法运行,但是课本上就是这么教的...
我用的编译器是vs2019
麻烦各位大神帮忙看下该怎么改啊
本帖最后由 superbe 于 2020-7-5 22:15 编辑
select()函数,如果本意是要返回国家的首字母,应该是return x[0],不是x[20]。x下标范围是0到19,实际国家名可能还不到19,x[20]是一个未知的字符。
如果是要返回完整的国家名,可以参考下面改法。这时不能只返回 x 的地址,因为 x 数组是局部变量,函数结束后 x 内容不存在了,main()输出就不正确。
改法一,在main里添加一个数组用来保存select()比较的结果,把这个数组做为参数传给select()
- #include<iostream>
- #include <cstring>
- //#include<string>
- using namespace std;
- void select(char a[], char b[], char c[], char result[]);
- int main()
- {
- char a[20];
- char b[20];
- char c[20];
- char result[20]; //result[]保存比较结果
- cout << "输入三个国家的英文名:";
- cin >> a >> b >> c;
- select(a, b, c, result);
- cout << "按首字母排序最靠前的国家是:" << result << endl;
- }
- void select(char a[], char b[], char c[], char result[])
- {
- if (strcmp(a, b) > 0)
- {
- if (strcmp(b, c) > 0)
- strcpy(result, c);
- else
- strcpy(result, b);
- }
- else
- {
- if (strcmp(a, c) > 0)
- strcpy(result, c);
- else
- strcpy(result, a);
- }
- }
复制代码
其中select()函数也可以改成返回result[]的地址:
char * select(char a[], char b[], char c[], char result[])
{
......
return result;
}
这样的好处是cout可以直接 cout << select(a, b, c, result)
|
|