c语言 关于文件加密解密问题
/* Program: Coder.c
* Usege: Coder [filename] [action]
* where filename = filename for/with coded data
* where action = D for decode anything else for
* coding
*-------------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int encode_character( int ch, int val );
int decode_character( int ch, int val );
int main( int argc, char *argv[] )
{
FILE *fh; /* file handle */
int rv = 1; /* return value */
int ch = 0; /* variable to hold a character */
unsigned int ctr = 0; /* counter */
int val = 5; /* value to code with */
char buffer[257]; /* buffer */
if( argc != 3 )
{
printf( " \nError: Wrong number of parameters..." );
printf( "\n\nUsage:\n %s filename action", argv[0] );
printf( "\n\n Where:" );
printf( "\n filname = name of file to code or decode" );
printf( "\n action = D for decode or c for encode\n\n" );
rv = -1; /* set return error value */
}
else
if(( argv[2][0] == 'D' ) || ( argv[2][0] == 'd' )) /* to decode */
{
fh = fopen( argv[1], "r" ); /* open the file */
if( fh <= 0 ) /* check for error*/
{
printf( "\n\nError opening file..." );
rv = -2; /* set return error value */
}
else
{
ch = getc( fh ); /* get a character */
while( !feof( fh ) ) /* check for end of file */
{
ch = decode_character( ch, val );
putchar( ch ); /* write the character to screen */
ch = getc( fh );
}
fclose( fh );
printf( "\n\nFile decoded to screen.\n" );
}
}
else /*assume coding to file. */
{
fh = fopen( argv[1], "w" );
if( fh <= 0 )
{
printf( "\n\nError creating file..." );
rv = -3; /* set return value */
}
else
{
printf( "\n\nEnter text to be coded. " );
printf( "Enter a blank line to end.\n\n" );
while( gets(buffer) != NULL )
{
if( buffer[0] == 0 )
break;
for( ctr = 0; ctr < strlen(buffer); ctr++ )
{
ch = encode_character( buffer[ctr], val );
ch = fputc( ch, fh ); /* write the character to file */
}
}
printf( "\n\nFile encoded to file.\n" );
fclose( fh );
}
}
system( "pause" );
return (rv);
}
int encode_character( int ch, int val )
{
ch = ch + val;
return (ch);
}
int decode_character( int ch, int val )
{
ch = ch - val;
return (ch);
}
代码可以运行成功,但是出现一个问题,好像只能执行第一个if语句。调试却没有找出原因,请朋友指点
声明(本人用dev编译器 编译于桌面的一个文件夹里(文件夹是中文)编译运行后显示的路径是桌面....不知道这个与错误有没有关系)
if(( argv[2][0] == 'D' ) || ( argv[2][0] == 'd' )) 还有这条代码设计的功能是解码 。 我主要是没有理解 argv[2][0] 怎么作为多维数组使用了?或者说能帮提示我理解的方法。
int main( int argc, char *argv[] ) 基本上就没用过,理解的层面很浅 只是知道 int argv 是参数个数 char *argv[] 是取参数。 也希望大家能帮给我点详细的提示什么的。
先谢过大家了