【问题标题】:Get length of item in multiple dimension array C获取多维数组C中项目的长度
【发布时间】:2014-09-29 15:07:24
【问题描述】:

我构造了一个数组:

char *state[] = {"California", "Oregon", "Texas"};

我想得到应该是 10 的加利福尼亚的长度,但是当我执行 sizeof(state[0]) 时,它只给了我 8(我认为这意味着 8 个字节,因为 char 的大小是 1 个字节)。但是为什么是 8 而不是 10?我仍然可以通过遍历 state[0][i] 打印出加利福尼亚的每个字符。

我是 C 新手,有人可以向我解释一下吗?

【问题讨论】:

  • 使用strlen
  • 使用strlen,而不是sizeof
  • state[0] 不是字符串,而是字符指针。 sizeof 给出内存中变量的大小,在这种情况下为 8 个字节(如果 state[0] 是一个整数,它将返回 4)。 C 没有字符串长度的概念,唯一找到它的方法是遍历数组,直到遇到字符 \0(C 中的所有字符串通常都以此字符结尾)
  • 检查一下系统中的指针大小。有可能8是指针大小。

标签: c arrays


【解决方案1】:

最简单的解释是sizeof 是一个编译时 计算表达式。因此它对字符串的长度一无所知,这本质上是需要在运行时评估的。

要获取字符串的长度,请使用strlen。这将返回字符串的长度 not,包括告诉 C 运行时字符串结尾在哪里的隐式空终止符。

另外,在设置字符串数组时使用const char* [] 是一个好习惯。这强化了这样一个事实,即修改 任何 数组内容是 未定义的行为

【讨论】:

  • 这些是字符串文字,但 sizeof 运算符确实知道。 sizeof("California") 是非常好的代码,会给出字符串长度。问题是字符串是通过指针引用的,所以类型信息会一路丢失。 stackoverflow.com/questions/1704407/…
猜你喜欢
  • 2015-08-13
  • 2012-03-13
  • 1970-01-01
  • 1970-01-01
  • 2011-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多