为什么传递给函数时C字符串长度会发生变化?

时间:2012-07-31 21:54:26

标签: c sizeof

  

可能重复:
  C -> sizeof string is always 8

如果我sizeof("HELLO");我得到6,这是预期的,但是如果我有:

void printLength(char *s) {
    sizeof(s);
}

将“Hello”传递给此函数sizeof时返回8.

为什么会这样?

3 个答案:

答案 0 :(得分:6)

你得到的是char *的大小。要获得实际长度,请使用strlen

答案 1 :(得分:4)

它不会改变。数组不是指针。 sizeof("HELLO")为您提供char数组{'H','E','L','L','O','\0'}的大小,sizeof(s)为您提供指针的大小。

答案 2 :(得分:3)

因为声明为固定大小的字符串文字和数组是专门处理的。编译器确切地知道它们有多大。

在你的函数中,所有编译器都知道它是指向某个东西的指针。你正在考虑字符指针的大小(在那一点上,是编译器所知道的)。你使用的是64位系统,所以你得到一个8字节的指针,无论你输入什么功能。

有一个库函数可以帮到你:

#include <string.h>

int getLength(char * str)
{
    return strlen(str);
}
相关问题