c - 结构的大小 - c 中的 size_t

标签 c struct sizeof

出于某种原因,当我尝试获取结构的大小时,我总是遇到段错误。

struct my_struct {
  char *a;
  int  b;
};

int main(int argc, char *argv[])
{
    struct my_struct dastruct;
    size_t len = sizeof(dastruct) / sizeof(struct my_struct); // error
    qsort(dastruct, len, sizeof(struct my_struct), cmp);
    ...
}

知道我做错了什么吗?谢谢

最佳答案

如果您是在

size_t len = sizeof(dastruct) / sizeof(struct my_struct); 

行,它可能是由 sizeof(struct my_struct) 评估为 0 引起的。(即问题实际上是被零除)。当 struct my_struct 类型不完整时,某些编译器可能会发生这种情况,即未定义。在 sizeof 中使用不完整的类型在 C 中是非法的,但某些编译器出于某种原因允许它,将其计算为 0。(尽管我希望编译器在编译时捕获此除以 0。)

你的代码明显是假的,没有说明问题。如果上述理论是正确的,很可能在您的实际代码中,您在 sizeof 中输入了错误的类型 struct my_struct 的名称,或者忘记包含类型的定义 >struct my_struct.

(极不可能,但无论如何......)

关于c - 结构的大小 - c 中的 size_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2411798/

相关文章:

c - sizeof(array_of_char) 输出奇怪的数字

c - 非常简单的纯 C 非负整数解析器的非常奇怪的行为

c - 是否可以在运行时设置结构内数组的大小?

java - 将c++代码翻译成java

c - 为什么在下面的编程中结构显示的内存比实际内存少

c - C 中整数的大小

c - 系统日志不记录我的程序日志条目

c - 如何在 Linux 上使用编解码器使用 v4l2 进行网络摄像头录制

c - C有连接运算符吗?

c - C 中结构的 Malloc