Я пытаюсь прочитать файл с некоторым зашифрованным содержимым ... шифрование состоит в том, что каждый символ, кроме '\ n' и "-", вычитал из него 4, а затем хорировал с 150 ... После прочтения зашифрованных символов из файла я помещаю их в строку и выполняю некоторую обработку (редактирование) с помощью библиотеки curses. Затем я снова шифрую строку и помещаю их обратно в файл. Но шифрование не работает.
Я поместил все содержимое расшифрованного файла в строку. Затем разбил строку на части на основе символов \ n и сохранил их в отдельных строковых массивах (2d), которые представляют последовательные строки в окне curses. Затем попыталсяреализовать некоторую систему управления курсором для редактирования строк и сохранения вновь отредактированных строк в массивах строк (2d). Затем я помещаю их обратно во временный файл. После этого я попытался зашифровать символы и, наконец, поместить их в исходный файл.
#include<stdio.h>
#include<curses.h>
#include<string.h>
#include<stdlib.h>
int main()
{
FILE *fp1;
if((fp1=fopen("demo.txt","rb"))==NULL)
{
printf("\n\n\t\t\t\t Could not open file! Press any key to return\n");
_getch();
return;
}
fclose(fp1);
int xrow,xcol,row,col,i=0,j,k=0,L=0,ch1,x;
char a[1405],ab[100][1405],c;
fp1=fopen("demo.txt" , "rb")
while(1)
{
c=fgetc(fp1);
a[i]=c;
i++;
if(feof(fp1))
break;
}
fclose(fp1);
a[i]='\0';
i=0;
initscr();
getmaxyx(stdscr,xrow,xcol);
for(j=0;j<=strlen(a);j++,k++)
{
if(a[j]=='\n')
{
ab[i][k]='\0';
k=-1;
i++;
continue;
}
ab[i][k]=a[j];
}
cbreak();
keypad(stdscr,TRUE);
for(k=0;k<=i;k++)
{
mvaddnstr(k,0,ab[k],-1);
refresh();
}
echo();
l=0;
while(1)
{
noecho();
ch1=getch();
getyx(stdscr,row,col);
switch(ch1)
{
case KEY_LEFT:
refresh();
if((col-1)<0)
{
beep();
}
else
{
col--;
}
wmove(stdscr,row,col);
refresh();
break;
case KEY_RIGHT:
if((col+1)>119)
{
beep();
}
else
{
col++;
}
wmove(stdscr,row,col);
refresh();
break;
case KEY_UP:
if((row-1)<0)
{
beep();
}
else
{
row--;
}
wmove(stdscr,row,col);
refresh();
break;
case KEY_DOWN:
if((row+1)>29)
{
beep();
}
else
{
row++;
}
wmove(stdscr,row,col);
refresh();
break;
case 8:
delch();
refresh();
break;
case 10:
for(k=0;k<=i;k++)
{
x=strlen(ab[k]);
mvinnstr(k,0,ab[k],x);
}
L=1;
break;
default:
addch(ch1);
refresh();
break;
}
if(l!=0)
{
break;
}
}
clear();
refresh();
endwin();
system("cls");
for(k=0;k<=i;k++)
{
printf("%s\n",ab[k]);
}
getch();
k=0;
L=0;
if((fp1=fopen("demo.txt","wb+"))!=NULL)
{
while(1)
{
if(k>i)
{
break;
}
if(ab[k][l]=='\0')
{
c='\n';
l=0;
k++;
fputc(c,fp1);
}
else
{
c=ab[k][l];
l++;
fputc(c,fp1);
}
}
}
fclose(fp1);
}
при печати линейных массивов в окне curses, я получаю странный вывод .... любая помощь будет отличнойя признателен! это часть моего проекта, и я на самом деле пытаюсь реализовать псевдотекстовый редактор, такой как функция>. <</p>
Edit: похоже, что проблема возникает после цикла while, содержащего переключательоператор выполняется. Для циклической печати строковые массивы печатают странные символы после этого. Также удалена вся работа по шифрованию-дешифрованию.