#include<stdio.h> #include<string.h> int main() { FILE *f1,*f2; f1=fopen("text1.dat","r"); f2=fopen("text2.dat","w"); int len,i; char str1[100],str2[100]; while(fgets(str1,100,f1)!=NULL) { len=strlen(str1); for(i=0;i<len;i++) { str2[i]=str1[len-i]; } fputs(str2,f2); } return 0; }这个程序哪里有问题
时间: 2024-03-23 15:37:37 浏览: 106
SeqList.h #include <stdio.h> //包含标准输入输出流的头文件 #include <assert.h
这个程序有两个问题:
1. 在将字符串 `str1` 中的字符倒序存储到字符串 `str2` 中时,没有考虑字符串结束符 `\0`,因此在字符串 `str2` 的末尾可能会出现未知字符,导致输出结果出现异常。
2. 在每次迭代循环时,应该将字符串 `str2` 的每个元素都设置为字符 `\0`,以避免上一次循环中的字符残留在 `str2` 中。
下面是修改后的示例代码:
```c
#include <stdio.h>
#include <string.h>
int main() {
FILE *f1, *f2;
f1 = fopen("text1.dat", "r");
f2 = fopen("text2.dat", "w");
char str1[100], str2[100];
int len, i;
while (fgets(str1, 100, f1) != NULL) {
len = strlen(str1) - 1; // 减去换行符
for (i = 0; i < len; i++) {
str2[i] = str1[len - 1 - i];
}
str2[i] = '\0'; // 添加字符串结束符
fputs(str2, f2);
memset(str2, 0, sizeof(str2)); // 清空字符串
}
fclose(f1);
fclose(f2);
return 0;
}
```
上述代码将字符串 `str2` 的每个元素都设置为字符 `\0`,并在字符串 `str2` 的末尾添加字符串结束符。同时,将循环条件修改为 `i < len`,以避免读取到换行符后将其存储到字符串 `str2` 中。
阅读全文