Я работаю функцию, которая открывает файл,
функция, которая читает содержимое этого файла в динамический массив,
функция, которая закрывает файл.
Пока я могу выполнить все вышеперечисленное, за исключением того, что динамический массив выходит из области видимости, когда я возвращаюсь в вызывающее местоположение (основное). Я хочу хранить дополнительные данные в массиве в то время как в основной или даже отдельной функции. Как только я закончу добавлять данные в динамический массив, я запишу их содержимое в исходный файл, перезаписав его новыми данными, а затем закрою этот файл. Цель состоит в том, чтобы добавить данные в начало исходного файла. Что я делаю не так с функцией char *LoadFileData(FILE *fp, char* charPtr);
что я не могу получить доступ или изменить его обратно в main?
Спасибо за помощь в этом.
FILE *fSource; // create source file pointer instance
char mode[] = "a+"; // default file open mode
char inStr[80]; // string to get input from user
char *tempFileData; // dynamic string to hold the existing text file
// Open the source file
strcpy(mode, "r"); // change the file opnen mode to read
FileOpen(&fSource, mode);
// Load the source file into a dynamic array
LoadFileData(fSource, tempFileData); // this is where I fail that I can tell.
printf("%s", tempFileData); // print the contents of the (array) source file //(for testing right now)
FileClose(&fSource); // close the source file
J
char *LoadFileData(FILE *fp, char* charPtr)
{
int i = 0;
char ch = '\0';
charPtr = new char; // create dynamic array to hold the file contents
if(charPtr == NULL)
{
printf("Memory can't be allocated\n");
exit(0);
}
// loop to read the file contents into the array
while(ch != EOF)
{
ch = fgetc(fp); // read source file one char at a time
charPtr[i++] = ch;
}
printf("%s", charPtr); // so far so good.
return charPtr;
}
Вместо прохождения в char *
значение которого вы никогда не используете, присвойте возвращаемое значение функции tempFileData
,
Так что измените функцию так:
char *LoadFileData(FILE *fp)
{
char* charPtr;
...
Тогда назовите это так:
tempFileData = LoadFileData(fSource);
Одной из проблем является сочетание следующих строк:
charPtr = new char; // create dynamic array to hold the file contents
charPtr[i++] = ch;
Вы выделяете память только для одного char
но продолжаю использовать его так, как будто он может содержать много символов.
Вам нужно:
Как насчет возвращения string
?
string LoadFileData(FILE *fp, char* charPtr)
Судя по отзывам каждого, эта модификация сработала. Спасибо!
char* LoadFileData(FILE *fp)
{
off_t size; // Type off_t represents file offset value.
int i = 0;
char ch = '\0';
char *charPtr; // dynamic arrary pointer that will hold the file contents
fseek(fp, 0L, SEEK_END); // seek to the end of the file
size = ftell(fp); // read the file size.
rewind(fp); // set the file pointer back to the beginning
// create a dynamic array to the size of the file
charPtr = new char[size + 1];
if (charPtr == NULL) {
printf("Memory can't be allocated\n");
// exit(0);
}
while (ch != EOF) {
ch = fgetc(fp); // read source file one char at a time
if (ch < 0) { // do not copy it if it is an invalid char
}
else {
charPtr[i++] = ch;
// load the char into the next ellement of the array
// i++;
}// end else
} // end while
return charPtr;
}