0

可能重复:
C -> sizeof 字符串始终为 8

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

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

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

为什么是这样?

4

3 回答 3

6

你得到的是char *. 要获得它的实际长度,请使用strlen.

于 2012-07-31T21:55:51.917 回答
4

它没有改变。数组不是指针。 sizeof("HELLO")给你char数组的大小{'H','E','L','L','O','\0'}sizeof(s)给你一个指针的大小。

于 2012-07-31T21:56:05.273 回答
3

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

在您的函数中,编译器所知道的只是它是指向某物的指针。您正在获取字符指针的大小(此时,编译器只知道它)。你在一个 64 位系统上,所以你得到一个 8 字节的指针,不管你把什么输入到函数中。

有一个库函数可以为您执行此操作:

#include <string.h>

int getLength(char * str)
{
    return strlen(str);
}
于 2012-07-31T21:59:28.223 回答