我知道字符串元素的访问方式与其他数组类似。
我使用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 ;
}
答案 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开始的字符打印到字符串的长度。