代码读取文本的指定行,编译报错,这是为何,高手帮看看
#include "stdio.h"
#include "conio.h"
char *rtxt(int i) //一个指针函数,接受传入一个整形变量 返回指针指向该字符串的地址
{
char filename[] = "C:\\test\\test.txt"; //定义文件路径
FILE *fp;
int whichline=i;//指定要读取哪一行
int currentindex=0; //当前读取的行
char strline[1024];//每行读取的最大字符数
if((fp=fopen(filename,"r"))== NULL)
{
printf("error");
return NULL;
}//打开文件
while(!feof(fp))
{
if (currentindex==whichline)
{fgets(strline,1024,fp);//读取一行 读取
printf("%s",strline);//显示这一行
return strline;
}
fgets(strline,1024,fp);//读取一行,并定位到下一行
currentindex++;
}
fclose(fp);
return NULL;
}
main()
{
char *rtxt(int i);
rtxt(0);
getch();
}
报错:C:\Program Files\Microsoft Visual Studio\MyProjects\5\5.c(23) : warning C4172: returning address of local variable or temporary
[解决办法]
return strline;
你的char strline[1024]是本地变量,他的内存是在栈里面,函数返回后,变量内容就无效了
[解决办法]
1.把strline定义为全局变量
2.动态new strline所使用的内存,用完后delete
[解决办法]
恩,按照第一个方法,定义为全局变量编译就没报错了。
第2个方法没试过,不过貌似new是C++用的吧。我在学写C的呢
c是malloc free