C 在运行时获取数组的大小

C 在运行时获取数组的大小,c,pointers,C,Pointers,我写了一个函数来读取一个缓冲区,其中包含了所用硬件的详细信息。现在,缓冲区的大小取决于硬件。有没有办法在读取缓冲区之前检查缓冲区的大小,这样我就不会访问任何非法位置并避免分段错误?或者在读取任何位置之前,是否可以查看我是否正在访问有效位置?方法1: 如果您不知道缓冲区的大小,请每次首先询问缓冲区的大小。然后使用malloc分配大小。使用它后,免费使用它 方法2: 至少你知道最大尺寸需要多少钱。静态分配最大BUFF大小 如果您不喜欢以上两个步骤,请执行以下操作 方法3: 寄件人知道他寄送的是多少尺

我写了一个函数来读取一个缓冲区,其中包含了所用硬件的详细信息。现在,缓冲区的大小取决于硬件。有没有办法在读取缓冲区之前检查缓冲区的大小,这样我就不会访问任何非法位置并避免分段错误?或者在读取任何位置之前,是否可以查看我是否正在访问有效位置?

方法1: 如果您不知道缓冲区的大小,请每次首先询问缓冲区的大小。然后使用
malloc
分配大小。使用它后,免费使用它

方法2: 至少你知道最大尺寸需要多少钱。静态分配最大BUFF大小

如果您不喜欢以上两个步骤,请执行以下操作

方法3: 寄件人知道他寄送的是多少尺码。确定一次传输的限制大小,并逐个发送

Eg: Fixed transfer size = 10bytes. //both sender and receiver have an idea
    message size to send = 50bytes.  //sender have idea but receiver don't know.

   struct my_struct {
                 int transaction_no;
                 char buf[SIZE];
                 int total_messages;
                 int current_message_no;
    };
所以发送者将他的数据分成5个数据包(每个10字节)。一个接一个地发送每个包

Eg: Fixed transfer size = 10bytes. //both sender and receiver have an idea
    message size to send = 50bytes.  //sender have idea but receiver don't know.

   struct my_struct {
                 int transaction_no;
                 char buf[SIZE];
                 int total_messages;
                 int current_message_no;
    };
所以,接收器检查传入的数据包,并再次重建数据


我认为前两种方法比这更好

你能给我们提供更多关于缓冲区的详细信息吗?缓冲区的类型是什么?不,用户需要存储大小信息(使用动态数组),可能链表式结构会有帮助。但是,如果您能分享您的相关代码片段,以及您所做的事情和您想要实现的目标,这将是一件好事。这个问题不可能不加猜测地回答,因为我们必须了解一些有关缓冲区和硬件的信息才能回答它。这是一个正常的int buf[],但它的大小将取决于硬件,指硬件的规格。就像阅读任何硬件的配置页面一样。