Довольно плохо знаком с c в общей схеме вещей, ища несколько советов о том, что именно вызывает ошибку сегмента в моем коде. Я считаю, что это связано с inputf2 = fopen (argv [2], "r"); поскольку это - строка, которую сказал GDB, имел проблему. Однако у меня есть почти идентичная строка ранее в моем коде, которая не вызывала ошибку сегмента для inputf1. Глядя на себя, я также считаю, что это из-за нулевого указателя, но я не совсем уверен, как мне открыть второй файл, если не нравится, как у меня. Я думаю, я просто запутался в файловом вводе / выводе в C. Основной смысл моего кода - прочитать два текстовых файла, один ключ и одно текстовое тело, а затем зашифровать текстовое тело с помощью ключа в шифре Vingenere. Использование файлов ввода / вывода в c является новым для меня, как обычно я делал это в java, поэтому я не совсем уверен, почему я получаю эту ошибку. Спасибо за чтение! Любой совет, будь то мой вопрос или просто исправление синтаксиса / другие мелкие ошибки в моем коде, будет принята с благодарностью, так как я все еще новичок и пытаюсь усовершенствовать свой подход к кодированию. Еще раз спасибо:)
Ошибка GDB:
Программа получила сигнал SIGSEGV, Ошибка сегментации. _IO_fgets (buf = 0x7ffff7ffd9f0 <_rtld_global + 2448> "", n = 8, fp = 0x0) в iofgets. c: 47 47 iofgets. c: Нет такого файла или каталога.
PS Извините если я не предоставил достаточно информации о программе или о segfault, пожалуйста, спросите меня, нужна ли какая-либо дополнительная информация! Кроме того, я прошу прощения, если это не место для новых ie вопросов, просто есть несколько других вариантов.
char* encrypt(char tempkeyray[512], char temptexray[512]) {
int i, j;
char encarr[512];
for(i=0; i<512; i++) {
encarr[i] = ('a' + (tempkeyray[i] + temptexray[i])%96 - 1);
}
for(j=0;j<512;j++) {
printf("%c", encarr[j]);
}
return 0;
}
int main(int argc, char **argv) {
char textray[512] = {0}, keyray[512] = {0};
char *temp, *temp2;
int count = 0, count2 = 0, i, j;
FILE *inputf1, *inputf2;
inputf1 = fopen(argv[1], "r");
while((fgets(temp, sizeof(temp), inputf1)) != NULL) {
count++;
if(isalpha(*temp)) {
if(*temp >= 'A') { //can make more specific
keyray[i] = tolower(*temp);
}
else {
keyray[i] = *temp;
}
}
}
for(i=count+1; i<512; i++) {
keyray[i] = keyray[i-(count+1)];
}
fclose(inputf1);
inputf2 = fopen(argv[2], "r");
while((fgets(temp2, sizeof(temp2), inputf2)) != NULL) {
count2++;
if(isalpha(*temp2)) {
if(*temp2 >= 'A') { //can make more specific
textray[i] = tolower(*temp2);
}
else {
textray[i] = *temp2;
}
}
}
for(j=count2; j<512; j++) {
textray[i] = 'x';
}
fclose(inputf2);
encrypt(keyray, textray);
}```