chararray 的 size 和 length 不相同。

23 浏览
0 Comments

chararray 的 size 和 length 不相同。

这个问题已经有了答案:

如何在C中确定数组的大小?

我已经有了几年的Python、C#和Java经验,现在才开始学习C语言。

我在一篇教程中学到,char anything[]总是指针。(今天,有人告诉我这是错误的)——我认为我的问题与此有关。

尽管如此,我仍在尝试获取char数组的长度:

#include 
int get_string_length(char * string)
{
    int length = 0;
    while(string[length] != '\0')
    {   
        char c = string[length];
        length++;
    }
    return length;
}
int get_string_size(char * string)
{
    return sizeof(string);
}
int main()
{
    printf("%d\n", get_string_size("hello world")); // returns 8
    printf("%d\n", get_string_length("hello world")); // returns 11
    printf("%d\n", sizeof("hello world")); // returns 12 -> Okay, because of '\0'-char
    return 0;
}

结果:

8

11

12

那么,为什么我的get_string_size方法返回的是8而不是12呢?(因为它们都只调用了sizeof())

admin 更改状态以发布 2023年5月23日
0
0 Comments

使用strlen()来确定字符串的长度。

使用sizeof()来确定字符串长度是危险的,应该避免使用。sizeof()返回给定类型的大小,而在这种情况下,给定类型是指针(因为系统大小为8,说明您的系统是64位的)。

考虑以下代码及其输出:

char string[] = "This is a test";
char *pointer = string;
printf("sizeof string: %zu\n", sizeof(string));
printf("sizeof pointer: %zu\n", sizeof(pointer));
printf("strlen pointer: %zu\n", strlen(pointer));
sizeof string: 15
sizeof pointer: 8
strlen pointer: 14

0
0 Comments

char anything[]是指针吗?不完全是这样。

字面量"hello world"的实际类型是const char[12]。(注意多出的用于NUL终结符的一个元素。)

但当将其传递给函数时,该类型会衰减为一个const char*

因此,get_string_size返回sizeof(const char*),在您的平台上为8(即char*的sizeof),但sizeof("hello world")sizeof(const char[12]),因为sizeof(char)被C标准定义为1。

get_string_length返回从其传递的指针开始的第一个NUL终结符的位置。

最后,需要注意使用%zu作为sizeof返回类型的格式指示符:在技术上,printf("%d \ n",sizeof("world")); 的行为是未定义的。

0