查找sizeof字符串的指针数组

时间:2015-09-02 08:17:15

标签: c

假设我们有方案..

char *a[] = {"abcd","cdef"};

我想知道字符串的大小" abcd",我不想使用strlen

请回答我如何获得字符串的大小" abcd"?

4 个答案:

答案 0 :(得分:5)

由于"abcd"是类型为char[5]的编译时已知数组,并且它直接写入源代码,您可以使用:

sizeof("abcd")

请注意:

sizeof("abcd") == strlen("abcd") + 1

前者包括终止NUL字符。

答案 1 :(得分:2)

迭代a[0]直至找到\0

即。 a[0][0], a[0][1], a[0][2], ....

但是,正如人们所说,重新发明轮子的必要性是什么。最好使用strlen()

答案 2 :(得分:2)

将实际的字符串常量作为单独的声明:

const char STR1[] = "abcd";
const char STR2[] = "cdef";

然后建立几个相应的表:

const char* STR_TABLE [] = 
{
  STR1,
  STR2
};

const size_t STR_SIZES [] =
{
  sizeof(STR1),
  sizeof(STR2)
};

或者,使用结构:

typedef struct
{
  const char*  str;
  size_t       size;
} str_t;

const str_t STR_TABLE [] = 
{
  { STR1, sizeof(STR1) },
  { STR1, sizeof(STR2) },
};

应该注意的是,字符串数组的大小与字符串长度不同,因为字符串长度不考虑帐户中的nul终止,sizeof执行。要从上面的示例中获取字符串长度,请在编译时使用sizeof(STR1)-1

答案 3 :(得分:0)

可能这就是你所需要的:

#include<stdio.h>

int size(char *ptr){
    int offset = 0;
    int len = 0;

    while (*(ptr + offset) != '\0'){
        ++len;
        ++offset;
    }

    return len;
}

int main(void){
    char *a[] = {"abcd","cdef"};

    int len = size(a[0]);
    printf("The size of\t%s\tis\t%d\n",a[0], len);
    return 0;
}

输出:

  

abcd的大小是4