我有以下代码,其中Index定义为length-1。如果我不包括--1,它会在开头打印一个多余的空格。为什么代码中需要-1?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char s[200];
int index, lenght;
printf("Input a string\n");
gets(s);
// Calculating string length
length = strlen(s);
index=length-1;
while (index >=0) {
printf("%c", s[index]);
index--;
}
printf("\n");
return 0;
}
答案 0 :(得分:1)
索引始终从0
开始。因此,如果strlen()函数返回长度x
,则其长度为x
,您必须从0迭代到x-1
。因此,您必须包含-1
。在索引x上将有\0
。
答案 1 :(得分:1)
让我们采用长度为5的字符串-abcde
。 len
是5。
while (index >=0) {
printf("%c", s[index]);
index--;
}
对于循环中的第一个元素,您正在打印s[index]
。您要打印e
,即s[4]
因此,您需要将索引设置为len-1
如果没有,则您正在打印s[5]
,即\0
(NULL终止符)。
答案 2 :(得分:1)
在开头添加额外字符的原因是,该字符串以NULL字符结尾。因此,如果您存储字符串“ abcdef”,它将被存储为a,b,c,d,e,f,\ 0。 Strlen将返回上述字符串的长度为6。因此,如果从打印数组索引6开始,则将打印NULL,依此类推。因此,额外的空间。 使用-1使您开始从数组索引5开始打印(您的数据将存储在数组索引0-5中),在这种情况下为f,因此您需要使用-1。