linux编程-linux中把一个磁盘文件信息复制到另一个中,总是出问题

问题描述

linux中把一个磁盘文件信息复制到另一个中,总是出问题

以下是源代码,实现的结果是,磁盘中的信息是隔一个字符复制的,不知道为什么,求指点,谢谢。
#include
#include
#include

main()
{
FILE *fp;
FILE *fp1;
char ch;
char filename[10];
char filename1[10];
char filepath[50];
char filepath1[100];
printf("give a file a filename: ");
scanf("%s",filename);
sprintf(filepath,"/socketTest/photo/%s",filename);
if((fp=fopen(filepath,"w+"))==NULL)
{
printf("cannot open the file <%s>n",filename);
return 0;
}//if
ch=getchar();
printf("please input:n");
ch=getchar();
while(ch!='#')
{
fputc(ch,fp);
ch=getchar();

}//while

fclose(fp);

printf("give another file a filename: ");
scanf("%s",filename1);
ch=getchar();
sprintf(filepath1,"/socketTest/photo/%s",filename1);

if((fp1=fopen(filepath1,"w+"))==NULL)
{
printf("cannot open the file <%s>n",filename1);
return 0;
}//if
printf("the length of %s is %dn",filename1,strlen(filepath1));
if((fp=fopen(filepath,"r"))==NULL)
{
printf("cannot open the file <%s>n",filename);
return 0;
}//if

while(fgetc(fp)!=EOF)
{
printf("%c",fgetc(fp));
fputc(fgetc(fp),fp1);

}

fclose(fp1);
fclose(fp);
printf("n file %s is ok!n",filename1);

}//main

解决方案

下面的代码使得字符指针fp一共向前移动了3次,不跳反而不正常了。

while(fgetc(fp)!=EOF)
 {
 printf("%c",fgetc(fp));
 fputc(fgetc(fp),fp1);
 }

fgetc(fp)调用了3次...

1楼正解.

解决方案二:

while(fgetc(fp)!=EOF)
{
printf("%c",fgetc(fp));
fputc(fgetc(fp),fp1);
}
这段代码,每一个fgetc的调用,就会引起fp中位置指针的向后移动,所以才会造成复制时的跳动。正确的代码应该是:
int c;
while((c = fgetc(fp))!=EOF)
{
//printf("%c",fgetc(fp));
fputc(c,fp1);
}

PS:几个建议:

1:变量起名要有意义,比如fpsrc,fpdst,这样别人一看就知道哪个是源文件,哪个是目标文件;
2:不要用sprintf,用snprintf;

解决方案三:

while 循环函数调用多次

时间: 2024-08-29 08:03:56

linux编程-linux中把一个磁盘文件信息复制到另一个中,总是出问题的相关文章

c++-求解答关于C++编程过程中的一个报错

问题描述 求解答关于C++编程过程中的一个报错 fatal error C1083: 无法打开包括文件:"Win32.Infrastructure.h": No such file or directory 报错如上,Win32.Infrastructure.h这个头文件是不是系统提供的呢?怎么解决这个错误,谢谢 解决方案 你自己搜索一下不就知道自己有没有这个头文件,不过我认为这个不是系统文件.

js-JS从单选框中选择一个值后,点击提交后显示出该值!请问我的代码怎么修改啊啊?

问题描述 JS从单选框中选择一个值后,点击提交后显示出该值!请问我的代码怎么修改啊啊? <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>无标题文档</title> <script type="text/javascript" language="javascript

qt 段错误 数据库-qt程序连接数据库中读取一个表没事,读多个表就出问题!

问题描述 qt程序连接数据库中读取一个表没事,读多个表就出问题! qt程序连接数据库中读取一个表没事,读多个表出问题!以前都不会出现这类问题,过段时间后再次去运行就不能运行了,直接跳出来.The program has unexpectedly finished. /home/wonhere/Setbackground-build-desktop/Setbackground exited with code 0

linux编程-linux文件传输,初学,请大家帮忙,谢谢

问题描述 linux文件传输,初学,请大家帮忙,谢谢 我 已经连接上了服务端,它有怎样的信息传输功能呢? #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "serv_client.h" int main(int argc,char** argv) {

linux编程-Linux程序运行时,报找不到动态库,有谁碰到过吗?

问题描述 Linux程序运行时,报找不到动态库,有谁碰到过吗? arm 32位 LINUX 环境下,想要调用第三方的库 libmsc.so 和libwiringPi.so 都放在了/usr/local/lib目录下 , 同时在LD_LIBRARY_PATH 下增加了/usr/local/lib 操作系统自带 arm-linux-gcc 编译版本是4.6.3 libmsc.so是在4.4.3下编译生成的 运行 ldconfig -v 可以看到找到了 /usr/local/lib: libmsc.s

linux编程-linux 问题 关于脚本的

问题描述 linux 问题 关于脚本的 为什么在linux 终端一句一句的输入命令,可以出最终的结果,而把这些命令和在一起放在一个脚本里就不行了呢 解决方案 从windows拷贝到linux虚拟机中的脚本编码问题解决怪异的Linux脚本无法执行问题解决怪异的Linux脚本无法执行问题---------------------- 解决方案二: 就是在linux下写的 解决方案三: 我只想到有两种情况不行 一种就是没在脚本配置环境变量 导致放到screen或者crontab中运行不了 还有一种就是要

linux编程-linux串口通信问题,急急急!!!

问题描述 linux串口通信问题,急急急!!! 我在开发板上qt程序,开发板跟PC机的虚拟机通过USB转串口线连接,上面运行的是Ubuntu12.04系统,我在PC上发送字符串,然后在开发板上接收,接收的数据单个单个字符接收,为什么不是一整个字符串接收呢?并且接收不到第一个字符,而且差不多接收10秒之后就不在接收数据了!!!!.请各位大神赐教!!! int fd,num,rtn; struct termios options; fd = open("/dev/ttyUSB0", O_R

linux编程-linux下关于TCP packet传输的时间和频率控制

问题描述 linux下关于TCP packet传输的时间和频率控制 我需要在linux环境下设计一个函数,大概长成这样: sender(time, packet_size, frequency, file). 其中time就是需要传输多久(s),packet_size就是包大小(KB),frequency是每秒传输多少个packet,file是所传输的文件.想请问大牛,这个time和frequency能在linux下 找到相匹配的函数或者选项或者结构体吗? 还有个问题是,我到底应该用socket

linux 编程-linux 内核编程 insmod错误:Unknown symbol in module

问题描述 linux 内核编程 insmod错误:Unknown symbol in module 日志报错:unknown symbol usb_register_notify 网上说这是因为依赖的模块没有加载, 怎么知道自己的内核程序依赖哪些模块? 解决方案 linux-3.1.4下的驱动模块 "Unknown symbol in module" 问题(by liukun321咕唧咕唧)insmod: Unknown symbol in module or no symbol ve