#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include<stdlib.h> char * getMax(char (*ss)[15]) { char temp[15]; static char str[15]; int index=0; if (strcmp(ss[0], ss[1])<0) { strcpy(temp, ss[1]); strcpy(ss[1],ss[0]); strcpy(ss[0],temp); index = 1; } if (strcmp(ss[0], ss[2]) < 0) { strcpy(temp,ss[2]); strcpy(ss[2],ss[0]); strcpy(ss[0],temp); index = 2; } strcpy(str,ss[0]); return str; } void dayin(char* aa) { printf("the biggest is %s\n",aa); //printf("the index=%d",index); } int main() { printf("input 3 characters\n"); char aa[3][15] = {0}; for (int i = 0; i < 3; i++) { int temp=gets(aa[i]); } char *s=getMax(aa); dayin(s); };该程序有什么问题
时间: 2024-03-28 18:40:21 浏览: 90
define _CRT_SEC.docx
这段程序有以下问题:
1. 使用了不安全的 gets 函数读取输入,会导致缓冲区溢出的风险,应该使用 fgets 函数替代。
2. getMax 函数返回的是一个指向静态局部变量的指针,如果该指针被传递到其他函数或线程中,那么该指针所指向的值可能会被修改,导致函数结果不可预测。
3. getMax 函数只能处理 3 个字符串,如果需要处理更多的字符串,则需要修改函数代码。
4. getMax 函数中的 index 变量没有被使用,应该删除。
5. 在 dayin 函数中,应该使用 %s 格式化字符串来打印字符串。
6. 在 dayin 函数中,应该将参数声明为 const char*,以避免修改字符串的风险。
7. 在主函数中,应该检查 gets 函数的返回值,以确保输入的字符串没有超过缓冲区的大小。
阅读全文