#include "usefunc.h" //don't worry about this -> lib I wrote
int main()
{
int i;
string given[4000], longest = "a"; //declared new typdef. equivalent to 2D char array
given[0] = "a";
printf("Please enter words separated by RETs...\n");
for (i = 1; i < 4000 && !StringEqual(given[i-1], "end"); i++)
{
given[i] = GetLine();
/*
if (sizeof(given[i]) > sizeof(longest))
{
longest = given[i];
}
*/
printf("%lu\n", sizeof(given[i])); //this ALWAYS RETURNS EIGHT!!!
}
printf("%s", longest);
}
为什么总是返回8 ???
有没有string
在C.数据类型这是C ++? 或者是string
一个typedef?
假设string
是一个typedef char *
,你可能想的是什么strlen
,不是sizeof
。 您刚刚接到8 sizeof
实际上是指针(字符串的第一个字符)的大小。
据处理它作为一个指针,sizeof运算指针显然是8个字节在机器上= 64位
你说“不担心这个 - > LIB我写的”,但是这是信息的关键部分,因为它定义字符串。 想必字符串是字符*和该机器上的大小为8。因此,的sizeof(给定的[I])为8,因为给定的[i]是一个字符串。 也许你想strlen的,而不是的sizeof。
这是字符数组本身和指针,该阵列开始的地方之间的共同的错误。
例如C风格的字符串文字:
char hello[14] = "Hello, World!";
是14个字节(13对于消息,和1为空终止字符)。 您可以使用sizeof()
来确定原C风格字符串的大小。
然而,如果我们创建一个指向字符串:
char* strptr = hello;
并试图发现它的大小与sizeof()
它只会始终返回系统上的数据指针的大小。
因此,换句话说,当你尝试从字符串库获取字符串的大小,你只有真正获得指针的大小到字符串的开始。 你需要使用什么strlen()
函数,该函数返回字符的字符串的大小:
sizeof(strptr); //usually 4 or 8 bytes
strlen(strptr); //going to be 14 bytes
希望这将清除的东西了!