在单独的函数中创建一个动态数组并通过调用函数对其进行操作
Create a dynamic array in separate function and manipulate it from calling function
我正在使用一个打开文件的功能,
将该文件的内容读入动态数组的函数,
关闭文件的函数。
到目前为止,除了当我返回调用位置(主要)时动态数组超出范围之外,我能够执行上述所有操作。我想在 main 或什至单独的函数中将其他数据存储在数组中。完成向动态数组添加数据后,我会将其内容写回源文件并用新数据覆盖它,然后关闭该文件。目的是将数据附加到原始文件的顶部。我无法在 main 中访问或修改函数 char *LoadFileData(FILE *fp, char* charPtr);
,我做错了什么?
感谢您对此的帮助。
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 = '[=11=]';
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;
}
返回 string
怎么样?
string LoadFileData(FILE *fp, char* charPtr)
与其传递一个你从未使用过的值的 char *
,不如将函数的 return 值赋给 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
分配内存,但继续使用它就好像它可以容纳很多字符一样。
您需要:
- 查找文件中存在的字符数。
- 为所有字符分配内存(如果需要以 null 终止数组则为 +1)。
- 读取文件内容到分配的内存中。
根据每个人的反馈,这是有效的修改。谢谢!
char* LoadFileData(FILE *fp)
{
off_t size; // Type off_t represents file offset value.
int i = 0;
char ch = '[=10=]';
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;
}
我正在使用一个打开文件的功能, 将该文件的内容读入动态数组的函数, 关闭文件的函数。
到目前为止,除了当我返回调用位置(主要)时动态数组超出范围之外,我能够执行上述所有操作。我想在 main 或什至单独的函数中将其他数据存储在数组中。完成向动态数组添加数据后,我会将其内容写回源文件并用新数据覆盖它,然后关闭该文件。目的是将数据附加到原始文件的顶部。我无法在 main 中访问或修改函数 char *LoadFileData(FILE *fp, char* charPtr);
,我做错了什么?
感谢您对此的帮助。
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 = '[=11=]';
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;
}
返回 string
怎么样?
string LoadFileData(FILE *fp, char* charPtr)
与其传递一个你从未使用过的值的 char *
,不如将函数的 return 值赋给 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
分配内存,但继续使用它就好像它可以容纳很多字符一样。
您需要:
- 查找文件中存在的字符数。
- 为所有字符分配内存(如果需要以 null 终止数组则为 +1)。
- 读取文件内容到分配的内存中。
根据每个人的反馈,这是有效的修改。谢谢!
char* LoadFileData(FILE *fp)
{
off_t size; // Type off_t represents file offset value.
int i = 0;
char ch = '[=10=]';
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;
}