Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 正在努力获取字符中的字符数* char*string=“你好”; cout_C++_Sizeof - Fatal编程技术网

C++ 正在努力获取字符中的字符数* char*string=“你好”; cout

C++ 正在努力获取字符中的字符数* char*string=“你好”; cout,c++,sizeof,C++,Sizeof,这是你想要的strlen,而不是sizeof。第一种方法计算直至终止NUL的字符数,而第二种方法给出类型的大小,在本例中,该类型是指针,而不是底层字符数组 最后一点,我的意思是: char* string = "hello there"; cout << sizeof( string ); // prints 4, which is the size of pointer cout << sizeof( *string ); // prints 1, which is

这是你想要的
strlen
,而不是
sizeof
。第一种方法计算直至终止NUL的字符数,而第二种方法给出类型的大小,在本例中,该类型是指针,而不是底层字符数组

最后一点,我的意思是:

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


无论如何,这是个未知数,因为<代码> STRULN()/Cord>是获得C字符串长度的正确方法(是的,即使是C++,尽管你可能想考虑使用C++字符串,因为它们可能会给你带来很多麻烦)。

< P> >代码> StrLon < /C> >,你想得到,而不是<代码> sieSeof 。第一种方法计算直至终止NUL的字符数,而第二种方法给出类型的大小,在本例中,该类型是指针,而不是底层字符数组

最后一点,我的意思是:

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

无论如何,这是个未知数,因为<代码> STRULN()/Cord>是获得C字符串长度的正确方法(是的,即使在C++中,尽管你可能想考虑使用C++字符串,因为它们可能会为你省去很多麻烦)。 例如,因为您定义了:

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

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

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

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

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


我不认为这两个都是骗局,不过如果SO上没有骗局,我会感到惊讶(我粗略地搜索都找不到)。第一个讨论的是一个被删除的字符的大小,第二个似乎是C++的字符串而不是字符指针。@ PaxDabiLo我不完全相信第二个是受限的。代码> STD::String ,新来的语言经常不知道它的存在。@ JuangopangZa,当我看到C++字符串没有某种限定符时,我倾向于假设适当的,尽管你是对的-很多答案都符合这两种类型。我不认为其中任一个是欺骗,虽然如果没有某处的某个地方,我会感到惊讶(所以我找不到草率的搜索)。第一个讨论的是一个被删除的字符的大小,第二个似乎是C++的字符串而不是字符指针。@ PaxDabiLo我不完全相信第二个是受限的。代码> STD::String ,新来的语言经常不知道它的存在。@ JuangopangZa,当我看到C++字符串没有某种限定符时,我倾向于假设适当的,尽管你是对的-很多答案都符合这两种类型。谢谢,这就是我所要寻找的。顺便说一下,我不知道C++中的字符串也以null结尾,我认为只有C.@ SkyPower,C++字符串(<代码> STD::String >)不同于C字符串,C++中还有C字符串。你的问题(和我的答案)中的字符串肯定是C类型的。谢谢,这就是我要找的。顺便说一下,我不知道C++中的字符串也以null结尾,我认为只有C.@ SkyPower,C++字符串(<代码> STD::String >)不同于C字符串,C++中还有C字符串。你的问题(和我的答案)中的那些字符串肯定是C类型的。我不太“确定”指针总是四个字节,但在其他方面是一个好答案。虽然我不确定为什么代码中既有
索引
又有
长度
,但这似乎有点浪费。您也可以轻松地执行以下操作:
char*tmp=str;而(*tmp!='\0')tmp++;返回tmp-str
@paxdiablo:是的,所有指针的大小不是4字节,但大多数指针的大小是4字节/“索引”用于提高可读性我的平台上大多数指针的大小是8字节。它不是一个非常奇特的平台,它只是一个x86-64。@juanchopanza:我的意思是在32位的系统中。如果每个人都回到平均水平,我们都会吃麦当劳而不是真正的食物,或者听可怕的、雌雄同体的男孩乐队,或者读17岁女孩的自传,这些女孩似乎没有意识到自己的生活还不值得讲述:-)我不太“确定”指针总是四个字节,但这是个好答案。虽然我不确定为什么代码中既有
索引
又有
长度
,但这似乎有点浪费。您也可以轻松地执行以下操作:
char*tmp=str;而(*tmp!='\0')tmp++;返回tmp-str
@paxdiablo:是的,所有指针的大小不是4字节,但大多数指针的大小是4字节/“索引”用于提高可读性我的平台上大多数指针的大小是8字节。而且这不是一个很好的例子
int length = 0;
int index = 0;
while ( string[index] != '\0')
{
length++;
index++;
}