我正在尝试创建一个程序,它将返回从text2.text文件中读取的值,但似乎它不会在* buffer指针上返回任何内容。当我尝试在checkValue函数中检查“buffer”中的字符串时,它会在text2.text中显示数据,但是当它返回到main函数时它不显示。有关如何将值传递给main函数的任何建议?谢谢。
#include <stdio.h>
#include <stdlib.h>
typedef struct VALUE_READER
{
char *result;
char *fileName;
char *sectionName;
char *keyName;
} Value_reader;
void checkValue(FILE *name_of_file, char *buffer, int size_of_file)
{
int i;
char holder[size_of_file];
buffer = malloc(sizeof(char) * size_of_file);
printf("%d \n",size_of_file);
for (i = 0; i < size_of_file; i++) {
holder[i] = fgetc(name_of_file);
if (holder[i] == EOF)
break;
}
holder[i] = 0;
for (i = 0; i < size_of_file; i++)
*(buffer+i) = holder[i];
}
int main()
{
Value_reader *vr1;
FILE *testFile;
int size_of_file;
testFile = fopen("test2.txt", "r");
fseek(testFile, 0, SEEK_END);
size_of_file = ftell(testFile);
fseek(testFile, 0, SEEK_SET);
if (NULL == testFile) {
printf("File not found!\n");
}
else {
vr1->result = malloc(sizeof(char) * 400);
checkValue(testFile, vr1->result, size_of_file);
printf("\nThe data inside are:\n\"%s\"\n", vr1->result);
free(vr1->result);
fclose(testFile);
}
}
答案 0 :(得分:0)
你正在分配一个char *:
vr1->result = malloc(sizeof(char) * 400);
然后将此传递给checkValue。但是在checkValue中,你用你自己的新malloc内存覆盖了这个指针:
buffer = malloc(sizeof(char) * size_of_file);
因此,在此之后编写的任何内存都是 缓冲区,它是您函数的本地缓冲区。您的选择是:
传递char **而不是char *,然后你可以在调用者中填充指针,该内存是函数内的alloc。 e.g:
checkValue(testFile,&amp; vr1-&gt; result,size_of_file);
然后在你的函数中:
void checkValue(FILE *name_of_file, char **buffer, int size_of_file)
{
...
*buffer = malloc(sizeof(char) * size_of_file);
...
}
答案 1 :(得分:0)
您还没有为“vr1”创建一个“Value_reader”对象来引用。
主要()中的这个陈述“vr1-&gt; result =”是未定义的。你试图取消引用一个未初始化的指针 为“vr1”指针分配一个struct对象指向。将main中的行更改为:
vr1 = malloc(sizeof(Value_reader));
答案 2 :(得分:0)
您通过调用main
在malloc
中分配缓冲区。然后将该指针传递给checkValue
。在checkValue
内部,您忽略传入的指针并分配新的缓冲区。你写入那个新的缓冲区,但是然后调用者无法看到你写的内容,因为你写了一个私有的缓冲区checkValue
。
或者:
checkValue
中分配缓冲区并将该缓冲区返回给调用者。