访问字符串元素混乱

时间:2015-03-08 12:57:45

标签: c string

我知道字符串元素的访问方式与其他数组类似。 我使用printf("%c",str[i]);打印字符串中的每个字符。使用此printf("%c",str[0]+i)代码打印输出字符串中的第一个字符,然后输出连续字符并在字符串长度结束时停止。


我想知道为什么会这样?

#include<stdio.h>
#include<string.h>
int main()
{
    char *str= "string" ;
    int s = strlen(str) ;
    int i ;
    for (i=0;i<s;i++)
    {
      printf("%c",str[i]); //valid
    }
    for (i=0;i<s;i++)
    {
       printf("\n%c",str[0]+i); //not valid
    }
    printf("\nThe length of string : %d\n ",s);
    return 0 ;
}

4 个答案:

答案 0 :(得分:0)

在此代码段中,您没有递增数组索引,而是添加整数&#39; i&#39;到位置&#39; str [0]&#39;的字符的ASCII值。因此,您将连续的字符作为输出。

for (i=0;i<s;i++)
{
printf("\n%c",str[0]+i); //not valid
}

答案 1 :(得分:0)

你可能想要

printf("%c",*(str+i))

而不是

printf("%c",str[0]+i)

当您使用str[0]+i时,i会添加到str[0]the ASCII table中显示的字符是连续的,并且在字符中添加数字(例如1),比如's',会导致't'字符t出现在s之后{{1}} ASCII表中的1}}。

答案 2 :(得分:0)

这是输出:

  

的字符串

     

取值

     

     

û

     

v

     

瓦特

     

X

     

字符串的长度:6

第一种方法是打印字符串的正确方法。第二种方式,你说这是无效的,实际上是这样做的 -

s [0]的Ascii值(等于115)+ i

&#39;的ascii值。 + 1 = ascii值&#39; t&#39; = 116,ascii值&#39; + 2 = ascii值&#39; u&#39; = 117等等。

希望它有所帮助!

答案 3 :(得分:0)

for (i=0;i<s;i++)
{
printf("\n%c",str[0]+i); //not valid
}

这里发生的事情是:

counter    command                output
i=0        print --> 115 + 0      s
i=1        print --> 115 + 1      t
...                               u
...

您使用i将整数s添加到s[0] + i的ASCII值,因此它会将从s开始的字符打印到字符串的长度。