我試圖通過線都要經過一個文件中的行(每行不超過50個字符),由10或-10每個字符移位(加密和解密),並然後打印舊字符串所在的移位字符串。但我得到了一些非常有趣的輸出。重寫線路中的C文件,奇怪輸出
繼承人的代碼:
#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
「但是我收到了一些非常有趣的輸出「 - 可能更有幫助,更精確... –
您可能不應該使用面向行的'fgets()'和'fputs()',因爲您可以在o中獲得NUL''\ 0''字符輸出數據。使用'fread()'和'fwrite()'。確保你也處理正確的字符數量; fgets()可能不會返回49個字符和一個NUL;該線可能會更短。 –
@MitchWheat很抱歉,希望這對您有所幫助 – agarrow