我具有以下功能:
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数组的总大小。
答案 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语言中则无法。