免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 2426 | 回复: 4

[C] 一段很简单的C程序,请帮忙排错 [复制链接]

论坛徽章:
0
发表于 2018-08-23 22:02 |显示全部楼层
本帖最后由 jdgdf566 于 2018-08-23 22:12 编辑

  1. int main(int argc, char *argv[])
  2. {
  3.     if(argc == 1)  return 0;
  4.     FILE* fileSRC = fopen(argv[1], "r");
  5.     if(fileSRC == NULL)
  6.     {
  7.         printf("文件不存在或不可读");
  8.         return 0;
  9.     }
  10.     FILE* fileDST1 = fopen(strcat(argv[1], ".1"), "w+");
  11.     //
  12.     unsigned int bufferSize = 1024*1024;        //1M bytes buffer
  13.     void* bufferSrc = malloc(bufferSize);
  14.     unsigned int length = 0;
  15.     while( !feof(fileSRC) )
  16.     {
  17.         length = fread(bufferSrc, bufferSize, 1, fileSRC);
  18.         printf("%d", length);
  19.         fwrite(bufferSrc, length, 1, fileDST1);
  20.     }
  21.    fclose(fileSRC);    fclose(fileDST1);    free(bufferSrc);
  22. return 0;
  23. }
复制代码
输出:0
真受不了

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
发表于 2018-08-24 09:02 |显示全部楼层
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>

  4. int main( int argc, char *argv[] )
  5. {
  6.     if( argc < 2 )
  7.         return 0;

  8.     FILE* file_src = fopen( argv[1], "rb" );
  9.     if( !file_src )
  10.     {
  11.         puts( "文件不存在或不可读." );
  12.         return 1;
  13.     }

  14.     char* filename = malloc( strlen(argv[1])+3 );
  15.     strcat( strcpy(filename,argv[1]), ".1" );
  16.     FILE* file_dst = fopen(filename, "wb");
  17.     free( filename );

  18.     const size_t buffer_size = 1024*1024;
  19.     void* buffer = malloc( buffer_size );
  20.     for( size_t n; n=fread(buffer,1,buffer_size,file_src), n>0; )
  21.         fwrite( buffer, 1, n, file_dst );
  22.     free( buffer );

  23.     fclose( file_dst );
  24.     fclose( file_src );

  25.     return 0;
  26.     // 忽略了malloc成功与否的检查、忽略文件打开成功与否的检查、忽略了读取错误的检查、写入错误的检查
  27. }
复制代码

论坛徽章:
0
发表于 2018-08-24 13:21 |显示全部楼层
学到很多东西,多谢多谢

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11
发表于 2018-08-28 09:33 |显示全部楼层

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>

  4. int main(int argc, char *argv[])
  5. {
  6.         char filename[256];
  7.         FILE* fileSRC;
  8.         FILE* fileDST1;
  9.         void *bufferSrc;
  10.         unsigned int length;
  11.         unsigned int bufferSize;
  12.         int retval;

  13.     if (argc > 1) {
  14.                 fileSRC= fopen(argv[1], "r");
  15.                 if(fileSRC != NULL) {
  16.                         strcpy(filename, argv[1]);
  17.                         strcat(filename, ".1");
  18.                         fileDST1= fopen(filename, "w");
  19.                         if (fileDST1 != NULL) {
  20.                                 bufferSize = 1024 * 1024;        //1M bytes buffer
  21.                                 bufferSrc = malloc(bufferSize);
  22.                                 if (bufferSrc != NULL) {
  23.                                         while(!feof(fileSRC)) {
  24.                                                 length = fread(bufferSrc, 1, bufferSize, fileSRC);
  25.                                                 printf("%d\n", length);
  26.                                                 fwrite(bufferSrc, length, 1, fileDST1);
  27.                                         }
  28.                                         free(bufferSrc);
  29.                                         retval = 0;
  30.                                 }else {
  31.                                         printf("没有内存空间\n");
  32.                                         retval = -1;
  33.                                 }
  34.                                 fclose(fileDST1);
  35.                         }else {
  36.                                 printf("不能写文件\n");
  37.                                 retval = -2;
  38.                         }
  39.                         fclose(fileSRC);
  40.                 }else {
  41.                         printf("文件不存在或不可读\n");
  42.                         retval = -3;
  43.                 }
  44.         }else {
  45.                 printf("USAGE: dupfile <source_file>\n");
  46.                 retval = -4;
  47.         }
  48.         return retval;
  49. }
复制代码

论坛徽章:
43
15-16赛季CBA联赛之四川
日期:2018-10-13 23:26:5015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:36程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
发表于 2018-08-29 13:58 |显示全部楼层
本帖最后由 windoze 于 2018-08-29 13:59 编辑

要不要试试短的?

  1. #include <fstream>
  2. int main(int argc, char *argv[]) {
  3.     std::ofstream(std::string(argv[1])+".1") << std::ifstream(argv[1]).rdbuf();
  4. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

【CUer福利】柯尼卡美能达2018数字化整合解决方案巡展
智领共创链动价值-2018数字化整合解决方案巡展

2018年11月,柯尼卡美能达携手主流IT网络媒体IT168及旗下ITPUB、ChinaUnix等论坛,特此邀请企业IT管理、运维人员/办公设备采购负责人员共同参与,分享柯尼卡美能达“智领共创链动价值”-2018数字化整合解决方案巡展!现场体验MOBOTIX智能视频监控解决方案!

活动入口>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:wangnan@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP