为什么strlen()工作而我的方法不起作用? [重复]

问题描述 投票:0回答:2

我有以下功能:

void print_out_reversed(char string[])
{
    int index = strlen(string);
    printf("%i\n", index);

    while (string[index] != '\0')
        index--;

    for (int i = index; i >= 0; i--)
        putchar(string[i]);
    putchar('\n');
}

删除该行后,此功能正常

int index = sizeof(string) / sizeof(string[0])

并替换它

strlen(string)

但为什么?我了解到如果你想找出数组的长度,你必须将数组除以数组[0]。在我的旧版本中,无论我输入哪个字符串,他总是打印出索引为8。我不知道为什么。我知道strlen()忽略“\ 0”之后的元素,但是假设我想要一个char数组的总大小。

c
2个回答
3
投票

这里

void print_out_reversed(char string[]) { }

string衰减到指针,它不是一个数组,因此当你执行sizeof(string)时,它会导致指针的大小不是数组的大小。

这个

int index = sizeof(string) / sizeof(string[0])

导致4/1,即4系统上的32-bit

而当你这样做的时候

int index = strlen(string);

strlen()返回string中除\0之外的字节数。 strlen()返回类型也是size_t。例如

size_t index = strlen(string);

0
投票

形式参数中的char string[]char* string相同,大小信息未通过。

在C ++中有一种方法可以将此大小推断为模板参数,但不能在C中。

© www.soinside.com 2019 - 2024. All rights reserved.