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
inprint\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
inprint\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[]
inprint\u out\u reversed(char string[])
不是数组,位是指针,因此不会发生衰减charstring[]
看起来就像一个数组sizeof(string)
只是指针的大小。“string
衰减为指针”-->不完全是char string[]
inprint\u out\u reversed(char string[])
不是数组,位是指针,因此不会发生衰减charstring[]
看起来就像一个数组sizeof(string)
只是指针的大小。