【发布时间】:2015-10-30 12:24:22
【问题描述】:
我必须从 C 中的结构返回两个值:
我有以下数据结构:
struct Bar
{
char *x;
long y;
};
struct Bar funct();
struct Bar funct()
{
struct Bar result;
FILE *fp;
long lSize;
char *buffer;
fp = fopen("list.txt", "rb");
if (!fp) perror("list.txt"), exit(1);
fseek(fp, 0L, SEEK_END);
lSize = ftell(fp);
rewind(fp);
buffer = calloc(1, lSize+1);
if(!buffer) fclose(fp), fputs("memory alloc fails", stderr), exit(1);
if (1!=fread(buffer, lSize, 1, fp))
fclose(fp), free(buffer), fputs("entire read fails", stderr), exit(1);
fclose(fp);
free(buffer);
printf("%ld\n", lSize);
result.x = (char *) buffer;
result.y = lSize;
}
当我在 char 函数中实现相同的代码时,我用 char 数组而不是结构来获取缓冲区,而 lSize 为 744。
我的主要功能如下:
int main()
{
char *buffer;
printf("Reading file...\n");
//buffer = readFile();
struct Bar result;
buffer = result.x;
printf("%s\n", buffer);
printf("%ld\n", result.y);
//collect_character_distribution(buffer);
return 0;
}
但在结构中,我没有从 *buffer 中获取数组值,而是从 lSize 中获取 0。我需要返回 *buffer 和 lSize 值。出于这个原因,我必须使用结构。
我该如何解决这个问题?
谢谢,
【问题讨论】:
-
嗯...'缓冲区'....你释放了它...
-
您缺少来自
funct的return。 -
删除
free(buffer)。你想继续使用这个缓冲区。在末尾添加return result;。 -
这个函数是正确的,有这些变化。如果您仍然有错误,则它必须在您未发布的代码中。我们很难调试您没有发布的代码。要获得好的答案,请发帖MCVE。
-
在编辑后的代码中你永远不会调用你的函数。您只需声明一个未初始化的变量
result,然后使用它。也许你的意思是struct Bar result = funct();