我必须从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;
}
但在结构上,我没有从*缓冲区获取数组值,而我从lSize得到0.我需要返回*buffer和lSize值.出于这个原因,我必须使用struct.
我该如何解决这个问题?
谢谢,
你的代码有问题 -
 free(buffer);                      // don't free it earlier, you later use it 
 printf("%ld\n", lSize);
 result.x = (char *) buffer;       //casting is not needed
你free buffer然后result.x指出它.free之后在调用函数.
还有这个 -
 if (1!=fread(buffer, lSize, 1, fp))
            fclose(fp), free(buffer), fputs("entire read fails", stderr), exit(1);
你应该避免这样写.它代表非常不清楚.
你可以这样写清楚 -
 if(1!=fread(buffer, lSize, 1, fp)){
        fclose(fp);
        free(buffer);
        fputs("entire read fails", stderr);
        exit(1);
 }
if也可以相应改变.
注意 - 你说你想return从函数中获取某些东西,但你的代码似乎没有这样做.
| 归档时间: | 
 | 
| 查看次数: | 70 次 | 
| 最近记录: |