Хорошо, так что в основном название говорит обо всем. Я работаю над проектом, где я получаю ошибку сегментации сразу после ввода имени файла, который я хочу открыть. Я создал небольшую программу, которая сделала именно это, но когда я реализую ее в своем проекте, она не работает. Я мог бы что-то игнорировать. Было бы здорово, если бы кто-нибудь мог это указать.Проблемы с открытием файла внутри функции C
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
//function prototypes
void printmenu();
void getcipher(char **arr, int *count, FILE **infile);
int main()
{
int flag = 1; //exit flag for menu loop
int choices; //user input for menu
int count = 0;
char arr[7000][25]; //store words in this array
FILE *infile = NULL; //input cipher file
while(flag)
{
printmenu();
scanf("%d", &choices);
getchar();
while(choices < 1 || choices > 4)
{
printf("\nInvalid input. Try again...");
scanf("%d", &choices);
getchar();
}//end while
switch(choices)
{
case 1:
getcipher((char **)arr, &count, &infile);
break;
case 2:
printf("2");
break;
case 3:
printf("3");
break;
case 4:
flag = 0;
break;
}//end switch
}//end while
return 0;
}
void printmenu()
{
printf("\n%s", "Menu Choices");
printf("\n%-40s%-20s", "Use Cipher text file as cipher key", "Enter 1");
printf("\n%-40s%-20s", "Create cipher using a text file","Enter 2");
printf("\n%-40s%-20s", "Decode existing cipher", "Enter 3");
printf("\n%-40s%-20s\n\n", "Exit Program","Enter 4");
}
void getcipher(char **arr, int *count, FILE **infile)
{
int flag; //flag for getting cipher text file
char buffer[1000]; //buffer for reading in lines
char *token;
int letters = 0; //index for letters
int low; //index for converting to lowercase
//Gets cipher text file
printf("\nEnter the name of the cipher text file: ");
scanf("%s", buffer);
printf("\n%s\n", buffer);
*infile = fopen(buffer, "r");
if(!(*infile))
{
printf("Unable to open file. Exiting...");
exit(1);
}//end while
//inputs words from cipher text file to array
while(fgets(buffer, 1000, *infile))
{
token = strtok(buffer, " ");
strcat(arr[*count], token);
count++;
while((token = strtok(NULL, " ")) != NULL)
{
strcat(arr[*count], token);
count++;
}//end while
}//end while
printf("\n%d" , *count);
int i = 0;
//print array
while(i < *count)
{
printf("\n%s ", arr[i]);
i++;
}//end while
}
Это моя вторая меньшая программа, которая открыла файл внутри функции. Я в основном скопировал это в свой проект.
#include<stdio.h>
#include<string.h>
void openfile(FILE **file);
int main()
{
FILE *file = NULL;
openfile(&file);
return 0;
}
void openfile(FILE **file)
{
char buffer[100];
printf("Enter the name of file: ");
scanf("%s", buffer);
*file = fopen(buffer, "r");
if(*file)
printf("\nSuccess!!");
}
Вы не используете указатель файла вне функции, но вы также не закрываете файл. Не уверен, что вы пытаетесь сделать с использованием такого файла, как я. – crashmstr
Вы передаете двумерный массив функции, ожидающей 'char **'. Это не верно. – EOF
У меня есть больше функций, чтобы написать это лишь небольшая часть того, что я хотел сделать. Вот почему я пытался передать файл по ссылке. Кроме того, да, я забыл закрыть файл, но это не имеет значения, потому что я не могу даже открыть его. –