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

C 为什么strlen()有效而我的方法无效?,c,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'); }

我有以下功能:

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”之后的元素,但假设我需要字符数组的总大小。

这里

void print_out_reversed(char string[]) { }

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

这个

结果是
4/1
4
32位
系统上

而当你这样做的时候

int index = strlen(string);
strlen()。另外
strlen()
返回类型为
size\u t
。例如

size_t index = strlen(string);
这里


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

这个

结果是
4/1
4
32位
系统上

而当你这样做的时候

int index = strlen(string);
strlen()。另外
strlen()
返回类型为
size\u t
。例如

size_t index = strlen(string);

形式参数中的
char string[]
char*string
相同,不传递大小信息


<>在C++中,有一种方法可以将这个大小推断为模板参数,但在C.< /P> < P> <代码> char字符串[]/COD>在形参中与“代码> char *字符串< /C> >相同,大小信息没有传递。p>
在C++中,有一种方法可以将这个大小推断为模板参数,但是在C.</P>中没有。你希望用<代码>完成什么(String [index ]=‘0’)索引?代码>?“要找出数组的长度,必须将数组除以数组[0]”-->为真。然而
char string
in
print\u out\u reversed(char string[])
不是数组。那么,它是什么呢?我如何正确地给一个函数数组,这样我就可以做这个操作?vEnEngCOS,嗯,作为C++的一个副本,在这里不适用。在任何情况下,目标都是反转字符串。这里根本不需要该数组的大小
void print_out_reversed(char string[]){int index=strlen(string);for(int i=index;i>0;){i--;putchar(string[i]);}putchar('\n');}
应该这样做。但是,如何给出char数组而不是函数指针呢?语法是char数组的语法,那么为什么不在内部将其作为一个数组处理呢?我试着学习C,因为一些程序员说C有一个清晰的语法,但我几乎准备说相反的说法是正确的。C有一个令人困惑的陷阱语法,只能用奇怪的边缘知识部分理解。你希望用
while(string[index]!='\0')index--?“要找出数组的长度,必须将数组除以数组[0]”-->为真。然而
char string
in
print\u out\u reversed(char string[])
不是数组。那么,它是什么呢?我如何正确地给一个函数数组,这样我就可以做这个操作?vEnEngCOS,嗯,作为C++的一个副本,在这里不适用。在任何情况下,目标都是反转字符串。这里根本不需要该数组的大小
void print_out_reversed(char string[]){int index=strlen(string);for(int i=index;i>0;){i--;putchar(string[i]);}putchar('\n');}
应该这样做。但是,如何给出char数组而不是函数指针呢?语法是char数组的语法,那么为什么不在内部将其作为一个数组处理呢?我试着学习C,因为一些程序员说C有一个清晰的语法,但我几乎准备说相反的说法是正确的。C有一个令人困惑的陷阱语法,只能用奇怪的边缘知识部分理解。”
string
衰减为指针“->不完全理解
char string[]
in
print\u out\u reversed(char string[])
不是数组,位是指针,因此不会发生衰减
charstring[]
看起来就像一个数组
sizeof(string)
只是指针的大小。“
string
衰减为指针”-->不完全是
char string[]
in
print\u out\u reversed(char string[])
不是数组,位是指针,因此不会发生衰减
charstring[]
看起来就像一个数组
sizeof(string)
只是指针的大小。