#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(const 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]); printf("temp=%d\n",temp); } char *s=getMax(aa); dayin(s); };该程序有什么问题
时间: 2024-03-28 20:39:38 浏览: 91
该程序存在以下问题:
1. 使用了不安全的gets函数获取输入,存在缓冲区溢出的风险。
2. getMax函数中使用了静态变量str作为返回值,存在线程安全问题。
3. getMax函数中的比较和交换逻辑存在问题,没有考虑到三个字符串的大小关系。
4. dayin函数中的输出语句中缺少了一个占位符,导致输出不完整。
5. 缺少头文件声明,例如标准库头文件的声明。
相关问题
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h>
这段代码是C语言中常用的头文件和预处理指令,主要作用如下:
1. `_CRT_SECURE_NO_WARNINGS`:这是一个编译器预处理指令,用于禁止编译器产生某些警告信息。在C语言中,使用一些不安全的函数(如`strcpy`、`scanf`等)可能会导致安全问题,编译器会产生警告信息。使用该指令可以取消这些警告,但也可能会带来一定的安全隐患,因此需要慎重使用。
2. `stdio.h`:这是C语言中标准输入输出头文件,包含了一些常用的输入输出函数(如`printf`、`scanf`、`fopen`、`fclose`等)的声明和定义。
3. `stdlib.h`:这是C语言中标准库头文件,包含了一些常用的函数(如`malloc`、`free`、`atoi`、`exit`等)的声明和定义。
4. `string.h`:这是C语言中字符串操作头文件,包含了一些常用的字符串操作函数(如`strcpy`、`strcat`、`strlen`、`strcmp`等)的声明和定义。
综上,这段代码主要是为了使用标准输入输出函数、标准库函数和字符串操作函数,并取消编译器产生某些警告信息。
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include<stdlib.h> int main(int argc, char* argv[]) { int a = 1; printf("\n%d\n", a % 2); system("pause"); return 0; }
你好!这是一个简单的C语言程序,它定义了一个宏 `_CRT_SECURE_NO_WARNINGS`,然后包含了一些头文件(stdio.h、string.h、stdlib.h)。在主函数中,声明了一个整型变量 a 并赋值为 1,然后使用 `%` 操作符计算 a 除以 2 的余数,并将结果打印出来。最后使用 `system("pause")` 函数来暂停程序的执行,以便查看输出结果。整个程序的返回值为 0,表示程序正常结束。
阅读全文