假设我们有方案..
char *a[] = {"abcd","cdef"};
我想知道字符串的大小" abcd",我不想使用strlen
。
请回答我如何获得字符串的大小" abcd"?
答案 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