#include<stdio.h> #include<stdlib.h> #include<string.h> int main(){ FILE*fp; char str[3][10],temp; int i,j,k,n=3; printf("Enter strings:\n"); for(i=0;i<n;i++) gets(str[i]); for(i=0;i<n-1;i++) { k=i; for(j=i+1;j<n;j++) if(strcmp(str[k],str[j])>0)k=j; if(k!=i) { strcpy(temp,str[i]); strcpy(str[i],str[k]); strcpy(str[k],temp); } } if((fp=fopen("D:\\CC\\string.dat","w"))==NULL) { printf("can’t open file!\n"); exit(0); } printf("\nThe new sequence:\n"); for(i=0;i<n;i++) {fputs(str[i],fp);fputs("\n",fp); printf("%s\n",str[i]); } return 0; }纠错
时间: 2023-12-10 14:02:47 浏览: 81
这是一个字符串排序的程序,但存在几个问题:
1. 使用 gets 函数读取输入字符串,存在缓冲区溢出的风险,应该使用 fgets 函数并指定缓冲区大小。
2. 交换字符串时使用了 strcpy 函数,但是 temp 只是一个字符变量,无法存储整个字符串,应该改为使用数组或指针来存储。
3. 在写入文件时,使用了 fputs 函数,但是没有在每个字符串后换行(题目要求每个字符串占一行),应该在 fputs 函数后加上一个换行符。
4. 在打开文件时,使用的是 Windows 的路径分隔符,应该改为使用跨平台的方式。
以下是修改后的程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 100
int main() {
FILE* fp;
char str[3][MAX_LEN], temp[MAX_LEN];
int i, j, k, n = 3;
printf("Enter strings:\n");
for (i = 0; i < n; i++) {
fgets(str[i], MAX_LEN, stdin);
str[i][strcspn(str[i], "\n")] = '\0'; // 去掉换行符
}
for (i = 0; i < n - 1; i++) {
k = i;
for (j = i + 1; j < n; j++)
if (strcmp(str[k], str[j]) > 0) k = j;
if (k != i) {
strcpy(temp, str[i]);
strcpy(str[i], str[k]);
strcpy(str[k], temp);
}
}
if ((fp = fopen("string.dat", "w")) == NULL) {
printf("can't open file!\n");
exit(0);
}
printf("\nThe new sequence:\n");
for (i = 0; i < n; i++) {
fputs(str[i], fp);
fputs("\n", fp); // 写入换行符
printf("%s\n", str[i]);
}
fclose(fp);
return 0;
}
```
阅读全文