在运行时获取数组的大小

时间:2014-04-04 10:13:37

标签: c pointers

我编写了一个函数来读取包含所用硬件细节的缓冲区。现在缓冲区的大小取决于硬件。有没有什么方法可以在读取缓冲区之前检查缓冲区的大小,以便我不访问任何非法位置并避免分段错误?或者在阅读任何位置之前,是否可以查看我是否正在访问有效位置?

1 个答案:

答案 0 :(得分:0)

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

Methode 2 : 至少你知道最大尺寸需要多少。静态分配MAX_BUFF_SIZE。

如果您不喜欢上述两个程序,请执行以下操作。

Methode 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个字节)。逐个发送每个数据包。

所以接收方检查传入的数据包并再次重建数据。

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