苦苦挣扎,以获得char *中的字符数量

时间:2013-06-09 11:45:31

标签: c++ sizeof

char* string = "hello there";

cout << sizeof( string ); // prints 4, which is the size of pointer
cout << sizeof( *string ); // prints 1, which is the size of char

如何获取字符串(11)中包含的字符数?

2 个答案:

答案 0 :(得分:4)

你想要的是strlen,而不是sizeof。第一个计算到终止NUL的字符数,而第二个给出类型的大小,在这种情况下,它是指针而不是基础的字符数组。

到最后一点,我的意思是:

char *x = "hello there";
char y[] = "hello there";
std::cout << sizeof(x) << ' ' << sizeof(y) << '\n';

很可能输出如下内容:

4 12

在具有32位指针(和8位char)的系统上。在这种情况下,4是指针的大小,12是数组中的字节数(包括末尾的NUL)。

在任何情况下,这都没有用,因为strlen()是获取C字符串长度的正确方法(是的,即使在C ++中,尽管你可能想考虑使用C ++字符串,因为它们可能会节省你很麻烦)。

答案 1 :(得分:1)

函数sizeof()以字节
形式返回数据类型的大小 例如,因为您定义:

char* string = "hello there";

然后string的类型是char *,并且大多数所有指针的大小都是4字节(此函数返回4)但是*string的类型是char和每个的大小字符是1个字节(此函数返回1)
解决方案:
备选方案1: 在库'string.h'中使用函数strlen()

备选方案2 :(从头开始)

int length = 0;
int index = 0;
while ( string[index] != '\0')
{
length++;
index++;
}