可能重复:
C -> sizeof 字符串始终为 8
如果我这样做sizeof("HELLO");
,我会得到 6,这是预期的,但是如果我有:
void printLength(char *s) {
sizeof(s);
}
将“Hello”传递给此函数sizeof
时返回 8。
为什么是这样?
可能重复:
C -> sizeof 字符串始终为 8
如果我这样做sizeof("HELLO");
,我会得到 6,这是预期的,但是如果我有:
void printLength(char *s) {
sizeof(s);
}
将“Hello”传递给此函数sizeof
时返回 8。
为什么是这样?
你得到的是char *
. 要获得它的实际长度,请使用strlen
.
它没有改变。数组不是指针。 sizeof("HELLO")
给你char
数组的大小{'H','E','L','L','O','\0'}
,sizeof(s)
给你一个指针的大小。
因为声明为固定大小的字符串文字和数组会被特殊处理。编译器确切地知道它们有多大。
在您的函数中,编译器所知道的只是它是指向某物的指针。您正在获取字符指针的大小(此时,编译器只知道它)。你在一个 64 位系统上,所以你得到一个 8 字节的指针,不管你把什么输入到函数中。
有一个库函数可以为您执行此操作:
#include <string.h>
int getLength(char * str)
{
return strlen(str);
}