user-0 提问: 对文件异或加密  提示Segmentation fault

回复:
user: user-0
content: 引用 1 楼 cfjtaishan 的回复:#include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <stdio.h> #include <string.h>  int main(int argc,char *str[]) {  #if 0     int i;     for (i = 0; i < argc; i++)         puts(str[i]); #endif     if(argc > 2)     {         FILE *fp = NULL,*fp2 = NULL;          if((fp = fopen(str[1],"r")) == NULL)         {             puts("文件打开错误");             exit(-1);         }          if((fp2 = fopen(str[2],"w")) == NULL)         {             puts("文件创建错误");             exit(-1);         }         int num_max = strlen(str[3]),y = 0;         char ch,tem;         while(1)         {             ch = fgetc(fp);             tem = ch ^ (str[3][y++]);             printf("%d\t%d\n",ch,tem);              if(isprint(tem))             {                 fputc(tem,fp2);             }else{                 fputc(ch,fp2);             }             if(feof(fp))             {                 fclose(fp);                 fclose(fp2);                 break;             }             if(y > num_max)             {                 y = 0;             }         }     }     puts("参数错误");     return -1; } 试一下这个。 两个问题： 第一个问题y没有初始化； 第二个问题，对于str的使用第三个是秘钥，那么使用时应该是str[3][y++]，而不是*str[y++]; 谢谢解答  指针和数组还没学好啊

user: user-0
content: 引用 1 楼 cfjtaishan 的回复:#include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <stdio.h> #include <string.h>  int main(int argc,char *str[]) {  #if 0     int i;     for (i = 0; i < argc; i++)         puts(str[i]); #endif     if(argc > 2)     {         FILE *fp = NULL,*fp2 = NULL;          if((fp = fopen(str[1],"r")) == NULL)         {             puts("文件打开错误");             exit(-1);         }          if((fp2 = fopen(str[2],"w")) == NULL)         {             puts("文件创建错误");             exit(-1);         }         int num_max = strlen(str[3]),y = 0;         char ch,tem;         while(1)         {             ch = fgetc(fp);             tem = ch ^ (str[3][y++]);             printf("%d\t%d\n",ch,tem);              if(isprint(tem))             {                 fputc(tem,fp2);             }else{                 fputc(ch,fp2);             }             if(feof(fp))             {                 fclose(fp);                 fclose(fp2);                 break;             }             if(y > num_max)             {                 y = 0;             }         }     }     puts("参数错误");     return -1; } 试一下这个。 两个问题： 第一个问题y没有初始化； 第二个问题，对于str的使用第三个是秘钥，那么使用时应该是str[3][y++]，而不是*str[y++]; 谢谢解答  指针和数组还没学好啊

user: user-1
content: #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <stdio.h> #include <string.h>  int main(int argc,char *str[]) {  #if 0     int i;     for (i = 0; i < argc; i++)         puts(str[i]); #endif     if(argc > 2)     {         FILE *fp = NULL,*fp2 = NULL;          if((fp = fopen(str[1],"r")) == NULL)         {             puts("文件打开错误");             exit(-1);         }          if((fp2 = fopen(str[2],"w")) == NULL)         {             puts("文件创建错误");             exit(-1);         }         int num_max = strlen(str[3]),y = 0;         char ch,tem;         while(1)         {             ch = fgetc(fp);             tem = ch ^ (str[3][y++]);             printf("%d\t%d\n",ch,tem);              if(isprint(tem))             {                 fputc(tem,fp2);             }else{                 fputc(ch,fp2);             }             if(feof(fp))             {                 fclose(fp);                 fclose(fp2);                 break;             }             if(y > num_max)             {                 y = 0;             }         }     }     puts("参数错误");     return -1; } 试一下这个。 两个问题： 第一个问题y没有初始化； 第二个问题，对于str的使用第三个是秘钥，那么使用时应该是str[3][y++]，而不是*str[y++];