jdgdf566 发表于 2018-08-23 22:02

一段很简单的C程序,请帮忙排错

本帖最后由 jdgdf566 于 2018-08-23 22:12 编辑


int main(int argc, char *argv[])
{
    if(argc == 1)return 0;
    FILE* fileSRC = fopen(argv, "r");
    if(fileSRC == NULL)
    {
      printf("文件不存在或不可读");
      return 0;
    }
    FILE* fileDST1 = fopen(strcat(argv, ".1"), "w+");
    //
    unsigned int bufferSize = 1024*1024;      //1M bytes buffer
    void* bufferSrc = malloc(bufferSize);
    unsigned int length = 0;
    while( !feof(fileSRC) )
    {
      length = fread(bufferSrc, bufferSize, 1, fileSRC);
      printf("%d", length);
      fwrite(bufferSrc, length, 1, fileDST1);
    }
   fclose(fileSRC);    fclose(fileDST1);    free(bufferSrc);
return 0;
}输出:0
真受不了

bruceteen 发表于 2018-08-24 09:02

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main( int argc, char *argv[] )
{
    if( argc < 2 )
      return 0;

    FILE* file_src = fopen( argv, "rb" );
    if( !file_src )
    {
      puts( "文件不存在或不可读." );
      return 1;
    }

    char* filename = malloc( strlen(argv)+3 );
    strcat( strcpy(filename,argv), ".1" );
    FILE* file_dst = fopen(filename, "wb");
    free( filename );

    const size_t buffer_size = 1024*1024;
    void* buffer = malloc( buffer_size );
    for( size_t n; n=fread(buffer,1,buffer_size,file_src), n>0; )
      fwrite( buffer, 1, n, file_dst );
    free( buffer );

    fclose( file_dst );
    fclose( file_src );

    return 0;
    // 忽略了malloc成功与否的检查、忽略文件打开成功与否的检查、忽略了读取错误的检查、写入错误的检查
}

jdgdf566 发表于 2018-08-24 13:21

学到很多东西,多谢多谢

cobras 发表于 2018-08-28 09:33


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
        char filename;
        FILE* fileSRC;
        FILE* fileDST1;
        void *bufferSrc;
        unsigned int length;
        unsigned int bufferSize;
        int retval;

    if (argc > 1) {
                fileSRC= fopen(argv, "r");
                if(fileSRC != NULL) {
                        strcpy(filename, argv);
                        strcat(filename, ".1");
                        fileDST1= fopen(filename, "w");
                        if (fileDST1 != NULL) {
                                bufferSize = 1024 * 1024;      //1M bytes buffer
                                bufferSrc = malloc(bufferSize);
                                if (bufferSrc != NULL) {
                                        while(!feof(fileSRC)) {
                                                length = fread(bufferSrc, 1, bufferSize, fileSRC);
                                                printf("%d\n", length);
                                                fwrite(bufferSrc, length, 1, fileDST1);
                                        }
                                        free(bufferSrc);
                                        retval = 0;
                                }else {
                                        printf("没有内存空间\n");
                                        retval = -1;
                                }
                                fclose(fileDST1);
                        }else {
                                printf("不能写文件\n");
                                retval = -2;
                        }
                        fclose(fileSRC);
                }else {
                        printf("文件不存在或不可读\n");
                        retval = -3;
                }
        }else {
                printf("USAGE: dupfile <source_file>\n");
                retval = -4;
        }
        return retval;
}

windoze 发表于 2018-08-29 13:58

本帖最后由 windoze 于 2018-08-29 13:59 编辑

要不要试试短的?

#include <fstream>
int main(int argc, char *argv[]) {
    std::ofstream(std::string(argv)+".1") << std::ifstream(argv).rdbuf();
}
页: [1]
查看完整版本: 一段很简单的C程序,请帮忙排错