#include<stdio.h>#include<string.h>int main(){ int i,j; char ch; FILE*fp; fp=fopen("C:\\FlFile\\ww.txt","w"); printf("请输入一段文字:\n"); ch=getchar(); while(ch!='0') { fputc(ch,fp); ch=getchar(); } fclose(fp); char *t; char c[255],*r; r=c; char a[255],b[255],*p,*q; p=a; q=b; gets(a); printf("输入密码:\n"); gets(b); i=strlen(b); for(j=0;j<i/2;j+=2) { t=b{j}; b[j]=b[i-j-1]; b[i-j-1]=t; } for(j=0;j<5;j++) { printf("请输入密码:\n"); gets(c); if(strcmp(q,r)!=0) { printf("文件打开失败"); }else{ fp=fopen("C:\\FlFile\\ww.txt","r"); break; } } return 0;}
时间: 2023-12-10 21:02:48 浏览: 24
这段代码中有一些问题。首先,不建议使用gets()函数来读取用户输入,因为它不会检查输入的长度,可能会导致缓冲区溢出攻击。可以使用fgets()函数来代替,它可以指定读取的最大字符数,避免缓冲区溢出。另外,使用字符串比较函数strcmp()来比较两个字符串是否相等时,应该使用它的返回值来进行判断,而不是判断它的值是否等于0。下面是修改后的代码:
```c
#include <stdio.h>
#include <string.h>
int main() {
int i, j;
char ch;
FILE *fp;
fp = fopen("C:\\FlFile\\ww.txt", "w");
printf("请输入一段文字:\n");
ch = getchar();
while (ch != '0') {
fputc(ch, fp);
ch = getchar();
}
fclose(fp);
char c[255], a[255], b[255], *p, *q;
p = a;
q = b;
fgets(a, 255, stdin);
printf("输入密码:\n");
fgets(b, 255, stdin);
i = strlen(b);
for (j = 0; j < i / 2; j += 2) {
char t = b[j];
b[j] = b[i - j - 1];
b[i - j - 1] = t;
}
for (j = 0; j < 5; j++) {
printf("请输入密码:\n");
fgets(c, 255, stdin);
if (strcmp(q, p) != 0) {
printf("文件打开失败");
} else {
fp = fopen("C:\\FlFile\\ww.txt", "r");
break;
}
}
return 0;
}
```
注意,这里只是对代码进行了一些基本的修改,还有很多可以改进的地方,比如错误处理、变量命名等。