如何用命令行参数替换文件中的fread()?

时间:2016-05-27 12:33:47

标签: c

我有以下代码:

uint8_t in[BLOCK256], out[32];
bytesread = fread( in, 1, BLOCK256, fp );

然后将in变量传递给另一个函数。

我试图用文件功能替换读数 使用strcpy(in,argv[1])将字符串作为参数插入程序。

我得到的结果虽然在这两种情况下有所不同。我不确定是什么问题。

int main( int argc, char **argv )
{
    #define BLOCK256 64
    FILE *fp;
    int i, j, bytesread;
    uint8_t in[BLOCK256], out[32];
    state256 S;
    blake256_test();

    for( i = 1; i < argc; ++i )
    {
        fp = fopen( *( argv + i ), "r" );
        if ( fp == NULL )
        {
            printf( "Error: unable to open %s\n", *( argv + i ) );
            return 1;
        }

        blake256_init( &S );

        while( 1 )
        {
            bytesread = fread( in, 1, BLOCK256, fp );
            if ( bytesread )
               blake256_update( &S, in, bytesread );
            else
               break;
        }

        blake256_final( &S, out );

        for( j = 0; j < 32; ++j )
           printf( "%02x", out[j] );

        fclose( fp );
    }
    return 0;
}

而不是读取文件的内容,而不是将字符串作为命令行参数传递。

1 个答案:

答案 0 :(得分:1)

int main(argc, argv[]){
     state256 S;
     blake_test();
     unsigned char digest[32];
     for (i=1; i < argc; i++){
          blake256_init(&S);
          blake256_update(&S,argv[i], strlen(argv[i]));
          blake256_final(&S, digest);
          print_digest(digest); /* your print loop as function, with extra newline */
     }
     return 0;
}

将执行该技巧(散列每个命令行参数字符串)。编写打印功能并添加string.h标题文件等。 顺便说一句,在任何一种情况下你都不是从stdin读取的。