Ç - >的sizeof串始终是8Ç - >的sizeof串始终是8(C -> size

2019-05-12 07:05发布

#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 ???

Answer 1:

有没有string在C.数据类型这是C ++? 或者是string一个typedef?

假设string是一个typedef char * ,你可能想的是什么strlen ,不是sizeof 。 您刚刚接到8 sizeof实际上是指针(字符串的第一个字符)的大小。



Answer 2:

据处理它作为一个指针,sizeof运算指针显然是8个字节在机器上= 64位



Answer 3:

你说“不担心这个 - > LIB我写的”,但是这是信息的关键部分,因为它定义字符串。 想必字符串是字符*和该机器上的大小为8。因此,的sizeof(给定的[I])为8,因为给定的[i]是一个字符串。 也许你想strlen的,而不是的sizeof。



Answer 4:

这是字符数组本身和指针,该阵列开始的地方之间的共同的错误。

例如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

希望这将清除的东西了!



文章来源: C -> sizeof string is always 8