为什么以下带有字符串的代码在从函数调用时会产生总线错误?

Why is the following code with strings generating a bus error when called from a function?

我已经解决了这个问题,但我想我可以 post 把它放在这里,以防它对其他人有帮助。

所以我有这段代码,它从文件中读取任意数据并打印出它找到的第一个字符串(以空结尾)。如果我直接在函数中使用代码,它似乎工作正常,但如果我在捕获 return 值后使用字符串,returning 字符串似乎总是导致总线错误。

static char *read_string(FILE *obj_file, off_t offset, size_t size) {
char *strraw = load_bytes(obj_file, offset, size);
char* str = malloc(size);
strcpy(str, "");
for (int i = 0; i < size; i++) {
    if (strraw[i] == '[=10=]') {
        strncpy(str, strraw, i + 1);
        break;
    }
}
free(strraw);
return str;

}

其他地方:

char *string = *read_string(obj_file, absoluteOffset, 1024);
printf("  The String: %s\n", string);
free(string);

如果我注释掉 printf,它运行良好,但如果我尝试使用它,则会出现总线错误。此函数遵循我制作的另一个函数的类似设计,该函数执行类似的字符串工作,而无需从文件中读取任何内容。

上面问题的问题是下面调用的函数有一个*前缀。

这导致返回值被取消引用(这不是我的本意),返回值的取消引用导致仅返回一个字符,这在尝试与 printf 一起使用时导致总线错误期望一个以空字符结尾的字符串,但它只收到一个字符。

调用此函数的方式应该是没有 *,如下所示。

char *string = read_string(obj_file, absoluteOffset, 1024);
printf("  The String: %s\n", string);
free(string);