为什么strlen()有效,而我的方法却无效?

时间:2019-01-05 09:13:09

标签: c

我具有以下功能:

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)

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

2 个答案:

答案 0 :(得分:3)

这里

void print_out_reversed(char string[]) { }

string衰减为 pointer ,它不是数组,因此,当您执行sizeof(string)时,它会导致 pointer大小,而不是数组。

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);

答案 1 :(得分:0)

形式参数中的

char string[]char* string相同,不会传递大小信息。

在C ++中,有一种方法可以推断出此大小作为模板参数,但在C语言中则无法。