파일을 한 줄씩 (각 줄은 50 자 이하) 통과하려고합니다. 각 문자를 10 또는 -10 (암호화 및 암호 해독)으로 이동하려고합니다. 그런 다음 이전 문자열이 있던 곳에 시프트 된 문자열을 인쇄하십시오. 그러나 나는 정말로 우스운 약간의 결과를 얻고있다.C의 파일에서 이상한 출력을 덮어 씁니다.
을 heres 코드 :
#include <stdio.h>
int main(void){
FILE *fp;
fp=fopen("tester.csv","r+");
Encrypt(fp); // I call decrypt here when I test it.
fclose(fp);
}
int Encrypt(FILE *fp){
int offset=10;
Shift(fp, offset);
}
int Decrypt(FILE *fp){
int offset= -10;
Shift(fp, offset);
}
int Shift(FILE *fp, int offset){
char line[50],tmp[50], character;
long position;
int i;
position = ftell(fp);
while(fgets(line,50,fp) != NULL){
for(i=0;i<50;i++){
character = line[i];
character = (character+offset)%256;
tmp[i] = character;
}
fseek(fp,position,SEEK_SET);
fputs(tmp, fp);
position = ftell(fp);
}
}
그렇게 tester.csv 원래 프로그램을 실행
this, is, a, test
를 읽는 경우는
~rs}6*s}6*k6*~o}~
êñv[ ‰
this, is, a, test
"하지만 정말 재미 있어요. 출력 "- 더 유용하고 정확할 수 있습니다 ... –
O()에서 NUL' '\ 0' '문자를 얻을 수 있기 때문에 아마도''fgets()''와''fputs 출력 데이터. 'fread()'와'fwrite()'를 사용하십시오.올바른 수의 문자도 처리해야합니다. fgets()는 49 문자와 NUL을 반환하지 않을 수 있습니다. 줄이 짧아 질 수 있습니다. –
@MitchWheat 죄송합니다. 더 도움이되기를 바랍니다. – agarrow