c语言文件字符串读取

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;
}


现象:

img

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;
}
 
 

img

修改如下,供参考:

#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;
}