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