C语言中读取txt文件内容

Python010

C语言中读取txt文件内容,第1张

楼主朋友,你的程序中的问题出在分配空间不足上。比如当你想让a[j]指向某段内存时,用的是

a[j]=(char *)malloc(sizeof(char)) 而到了后面你是要在这段内存中存入一个字符串的,所以就发生了越界。下面是我根据你的代码片段写的一个测试程序,经过修改应该没问题了。

#include <stdio.h>

#include <stdlib.h>

int main (void)

{

char path[]="12345.txt"

FILE *create

if((create=fopen(path,"r"))!=NULL)

{

int j char **a

a=(char **)malloc(100*sizeof(char*))//此处如果只申请一个char *大小的空间时,

//你以后的a[j]往哪里放?此处的100是假设你的文件中有100行信息。如果超过100还得多分配

for (j=0j++)

{

a[j]=(char *)malloc(10000*sizeof(char)) //此处只申请一个字符的空间,后面读取

//长度为10000的字符串就没地方存放了

fgets(a[j],10000,create)

printf("%s",a[j]) //测试读取是否成功,将文件中信息显示到屏幕上

if(feof(create)!=0)

{

for(j=0j--)

free(a[j])

break

}

}

free(a)

}

else

printf("Fail to open the file.\n")

fclose(create)

printf("\n")

}

以下程序实现输入文件名, 按行读文件, 并输出.

int main()

{

    FILE *fp

    char name[100]

    char buf[1024]

    scanf("%s",name)

    fp=fopen(name, "r")

    if(fp == NULL)

        printf("open file failed\n")

    else

    {

        while(fgets(buf, fp) != NULL)

            printf("%s", buf)

    }

    fclose(fp)

    return 0

}

除了按行读取外, 还可以单个字符读取 fgetc, 格式化读取fscanf.

用法类似于getchar和scanf