当它用作字节数组并分配给char指针时如何获取char数组长度?

时间:2014-06-30 10:46:03

标签: c arrays char

当我使用char数组作为二进制数据的容器时,数组中的每个项都可以是8位整数。当数组分配给char指针时,如何获取char数组长度?这是一个例子:

// t.c
#include <stdio.h>
#include <string.h>

int main() {
    char buffer[3] = {12, 13, -14};
    char * p = buffer;
    printf("%d ", sizeof(buffer));
    printf("%d ", strlen(buffer));
    printf("%d ", sizeof(p));
    printf("%d ", strlen(p));
    printf("%d\n", sizeof(char *));

    return 0;
}

输出为:3 6 8 6 8

gdb调试:

(gdb) where
#0  main () at t.c:8
(gdb) p p
$1 = 0x7fffffffe4b0 "\f\r\362\377\377\177"
(gdb) p (char *)buffer
$2 = 0x7fffffffe4b0 "\f\r\362\377\377\177"
(gdb) x/8db 0x7fffffffe4b0
0x7fffffffe4b0: 12      13      -14     -1      -1      127     0       0

正如您所看到的,strlen(缓冲区)不是数组长度,因为后续内存不是0. sizeof(p)不是数组长度,因为它实际上是char指针的大小(64位操作系统) )。

我的问题是,当p传递给另一个函数时,如何通过p得到实数组的长度? 请注意示例中的char数组不是:

char buffer[4] = "abc";

1 个答案:

答案 0 :(得分:1)

这是不可能的。

您需要将长度作为单独的参数传递。