【问题标题】:Best practice to declare character array in C在 C 中声明字符数组的最佳实践
【发布时间】:2016-03-07 08:52:25
【问题描述】:

我必须从一个 4 字节长的设备中读取数据,这样我就声明了类似的数组

char data[4] = {0};

我会根据索引解析这个并保证在索引 3 处停止。

数据[0]..数据[3]

在这种情况下,NUL('\0') 没有空间。

我想知道这是否被认为是安全的,或者我应该将数组声明为

char data[5] = {0};

str* 系列函数中不会用到这个数组。

【问题讨论】:

  • 这取决于你打算用data做什么。某些函数需要最终的 '\0': strlen, strchr, strcpy... 有些不需要:memcpy, ...
  • 多出一个字节会花费你吗?恕我直言,安全,防白痴,选择 5。
  • char data[5]; 然后memset( data, 0, sizeof data );
  • @i486 - 怎么样更好?
  • “标准”?我想你拼错了 lame

标签: c arrays string nul


【解决方案1】:

如果要读取的数据是4 字节的字符串,或者它大于4 字节,并且您使用char 作为字符数组而不是字符串,则无需担心。否则你必须关心'\0'

【讨论】:

    【解决方案2】:

    如果您不使用处理诸如strcmp()strlen()%sprintf() 说明符的字符串的函数来处理该数据,则将char data[4]; 用于4 字节数据应该是安全的。

    【讨论】:

      【解决方案3】:

      我使用的一些规则:

      • 要存储字符串,应该为 \0 字符再分配 1 个字节。例如char arr[len+1];

      • 要存储字符串以外的固定大小数据,请根据需要进行分配。例如char data[len];

      • 如果它非常大,并且大小动态变化,则可以通过malloc() 分配,稍后通过realloc() 调整大小。例如void *buf = malloc(size);

      • 当数组需要被多个函数使用时,将其声明为静态char[]或通过malloc()分配。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多