C反串

时间:2018-10-29 04:10:40

标签: c

我有以下代码,其中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;
}

3 个答案:

答案 0 :(得分:1)

索引始终从0开始。因此,如果strlen()函数返回长度x,则其长度为x,您必须从0迭代到x-1。因此,您必须包含-1。在索引x上将有\0

答案 1 :(得分:1)

让我们采用长度为5的字符串-abcdelen是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。