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

4

4 回答 4

14

C中没有string数据类型。这是C++吗?还是stringtypedef?

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

于 2011-02-09T03:57:10.173 回答
6

它把它当作一个指针,指针的大小在你的机器上显然是 8bytes = 64 bits

于 2011-02-09T03:57:16.883 回答
4

您说“不要担心这个 -> 我写的 lib”,但这是关键信息,因为它定义了字符串。大概 string 是 char* 并且在您的机器上的大小是 8。因此, sizeof(given[i]) 是 8,因为 given [i] 是一个字符串。也许你想要 strlen 而不是 sizeof。

于 2011-02-09T03:58:07.770 回答
3

这是字符数组本身与指向该数组开始位置的指针之间的常见错误。

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

希望这可以解决问题!

于 2016-01-13T17:59:29.373 回答