我知道字符串元素的访问方式与其他数组类似。我使用 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 : %dn ",s);
return 0 ;
}
你可能想要
printf("%c",*(str+i))
而不是
printf("%c",str[0]+i)
使用 str[0]+i
时,i
将添加到str[0]
中。ASCII 表中表示的字符是连续的,将数字(例如 1)添加到字符(例如 's'
)会导致字符't'
,因为 t
紧随 ASCII 表中的s
之后。
在此代码片段中,您不会递增数组索引,而是将整数"i"添加到位置"str[0]"字符的 ASCII 值中。因此,您将获得连续字符作为输出。
for (i=0;i<s;i++)
{
printf("n%c",str[0]+i); //not valid
}
这是输出:
字符串
s
t
u
v
w
x
字符串长度:6
第一种方法是打印字符串的正确方法。第二种方式,你说无效,实际上是这样做——
ascii 值 s[0](等于 115)+ i
ascii 值 's' + 1 = ascii 值 't' = 116, ascii 值 's'+2 = ascii 值 'u' =117 依此类推。
希望对您有所帮助!
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
...
您将使用s[0] + i
将整数i
添加到 ASCII 值 s
中,因此它会打印从 s 开始到字符串长度的字符。