字符数组逆序
逆序函数:
void reverse(char *buf)
{
int len=strlen(buf),i;
char a;
for(i=0;i<len;i++)
{
a=buf[i];
buf[i]=buf[len-1];
buf[len-1]=a;
len--;
}
}
读写函数:
void wr256B()
{
int r_size=256;
char buf[r_size+1];
/*long l_num;
l_num=ftell(fi);
if(r_size>l_num)
{
r_size=l_num;
}*/
fseek(fi,-(r_size),2);
while (1)
{
fread(buf,r_size,1,fi);
reverse(buf);
fwrite(buf,r_size,1,fo);
if (fseek(fi,-(r_size*2),1))
break;
}
}
main:
void main()
{
fo=fopen("_a","wb");
fi=fopen("a","rb");
//fseek(fi,-1,2);
wr4KB();
//remove("a");
//rename("_a","a");
fclose(fi);
fclose(fo);
}
结果:
54321098765432109876543210987654321098765432109876543210987654.....
前面多来一个乱码和换行,占来3个字节,如何消除。我用的是Linux。
[解决办法]
read出来后在最后面加个'\0'
[解决办法]
char buf[r_size+1];//这个定义以后,memset一下
memset(buf, 0, sizeof(buf));//在while循环的每次重新用的时候也要清零
[解决办法]
fread 本身就会以回车结束输入,所以你读入的字符串最后一个为回车
要在你的程序中去除此字符然后再翻转 否则就会包含此字符进行了翻转
[解决办法]
楼上正解