c语言,输入一个字符串,保存到1.txt文本文件中,然后读出来,存放到一个数组,然后把该数组打印出来,结果,打印该数组时,末尾总是会出现一个结束标志。怎么办?
代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include
#include
int main() {
FILE* p;
char s1[100] = {'\0'};
char s2[100] = {'\0'};
scanf("%s",s1);
p = fopen("1.txt", "w");
for (int i = 0; s1[i] != '\0'; i++) {
fputc(s1[i], p);
}
fclose(p);
p = fopen("1.txt", "r");
int i = 0;
do {
s2[i++] = fgetc(p);
if (feof(p)) {
break;
}
} while (1);
s2[i] = '\0';
fclose(p);
printf("%s\n",s1);
printf("%s\n",s2);
printf("length:%d",strlen(s2));
return 0;
}
现象:
17行的i++移到if后面。
最后一行增加: \r\n
printf("length:%d\r\n",strlen(s2));
可以在do-while循环中的if分支增加一个else分支来进行字符存储操作, 即把读取的字符赋值到数组s2相应元素放置于else分支即可;
具体原因是feof产生结果是针对最近一次读取操作来判断的,所以在fgetc()读取一个字符后,用feof()判断是否到文件尾,如果到了文件尾部则退出循环,如果没有达到文件尾部,则把此字符赋值到字符数组,这样就可以避免把文件标志读取到数组中。
修改如下:
参考链接:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main() {
FILE* p;
char s1[100] = {'\0'};
char s2[100] = {'\0'};
scanf("%s",s1);
p = fopen("1.txt", "w");
for (int i = 0; s1[i] != '\0'; i++) {
fputc(s1[i], p);
}
fclose(p);
p = fopen("1.txt", "r");
int i = 0;
do {
char ch = fgetc(p);
if (feof(p)) {
break;
}else{
s2[i++]=ch;
}
} while (1);
s2[i] = '\0';
fclose(p);
printf("%s\n",s1);
printf("%s\n",s2);
printf("length:%d",strlen(s2));
return 0;
}
修改如下,供参考:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main() {
FILE* p;
char s1[100] = { '\0' };
char s2[100] = { '\0' };
scanf("%s", s1);
p = fopen("1.txt", "w");
for (int i = 0; s1[i] != '\0'; i++) {
fputc(s1[i], p);
}
fclose(p);
p = fopen("1.txt", "r");
int i = 0;
//do {
while ((s2[i] = fgetc(p)) != EOF) i++;
// if (feof(p)) {
// break;
// }
//} while (1);
s2[i] = '\0';
fclose(p);
printf("%s\n", s1);
printf("%s\n", s2);
printf("length:%d", strlen(s2));
return 0;
}