文件操作函数
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
FILE *fp=NULL;
int f_size=0;
char*all=NULL;
fp=fopen("0.txt","r+b");
if(fp==NULL)
{printf("open error");system("pause");}
fseek(fp,0L,SEEK_END);
f_size=ftell(fp);
fseek(fp,0L,SEEK_SET);
all=(char*)malloc(f_size+1);//多分配一个字节用作赋0结尾
//memset(all+f_size+1,'\0',1);//在free时出错,超出内存分配大小
//memset(all+f_size,'\0',1);//正确,地址偏移是分配的内存-1
memset(all+f_size,0,1);//也可用这种方式,直接赋0,0是\0的ASC2码,而偏移量是
all+f_size而不是all+f_size+1
fread(all,f_size,1,fp);//这里实际上不论f_size加多少都无法覆盖上面的memset0可见fread
已经到文件尾了
printf("%s",all);
free(all);
fclose(fp);
return 0;
}
注意操作buffer的读写在最后free时都会报错。
文件结尾不会读入什么0xFF之类的东西,乱码是因为本身buffer越界往后存放的字符本来就是
不确定的。(fread读到EOF的时候就终止了,不会继续读取了,也不回会读取EOF)
要用变量作文件名,则先转成字符型再拼接字符,代码如下:
int aaa=0;
char d[6];
char *s=NULL;
d[0]=(char)aaa+'0';
d[1]='\0';
s=".txt";
strcat(d,s);//该函数会追加字符串到d的后面
fp=fopen(d,"r+b");
无法返回多个值的时候,可以用参数引用,代码如下:
int main()
{
int t_a=0,t_b=0;
int change_ab(int &a,int &b);
change_ab(t_a,t_b);
printf("t_a=%d,t_b=%d",t_a,t_b);
return 0;
}
int change_ab(int &a,int &b)
{
a=111;
b=222;
return 0;
}
参数引用在对传进的变量进行修改后并不会销毁(实际上是传进指针)。注意C不支持,CPP才可
以。
另复习一下static吧,很久没用:
#include <iostream.h>
void fn();
void main()
{
fn();
fn();
}
void fn()
{
static n=10;
n++;
cout<<n<<endl;
}