C 正在尝试打印字符串的第一个字符

C 正在尝试打印字符串的第一个字符,c,C,我试图打印字符串的第一个字母,在这种情况下,单词是“radar”。我遇到的问题是,它正在打印整个字符串。让我困惑的是,当我将str[0]更改为str[1]时,它将打印“adar”。为什么它要删除第一个字母,然后打印其余的字母,而不是相反的方式 void first(char *str) { char *initial; initial = &(str[0]); printf("Its first character is %s\n", initial); return

我试图打印字符串的第一个字母,在这种情况下,单词是“radar”。我遇到的问题是,它正在打印整个字符串。让我困惑的是,当我将
str[0]
更改为
str[1]
时,它将打印“adar”。为什么它要删除第一个字母,然后打印其余的字母,而不是相反的方式

void first(char *str)
{
  char *initial;
  initial = &(str[0]);

  printf("Its first character is %s\n", initial);

  return;

}

字符的格式说明符是
%c
。 只需取消引用即可从
str
获取第一个字符:
str[0]

总之,你可以这样做:

void first(char *str)
{
    printf("Its first character is %c\n", str[0]);
}
为什么它要删除第一个字母,然后打印其余的字母,而不是相反的方式

void first(char *str)
{
  char *initial;
  initial = &(str[0]);

  printf("Its first character is %s\n", initial);

  return;

}

str[1]
为您提供
str
中的第二个字符。在代码中,您将
initial
定义为指向第二个字符地址的指针。然后,您将
首字母
视为字符串(通过使用
%s
说明符打印它),这样您就得到了第二个字符及其后的所有内容,直到字符串末尾的
\0
字符。

使用
%c
打印字符而不是字符串。
str
,从而
str+0
,指向
雷达
str+1
因此指向
adar
。未删除任何内容。保留该内容作为规范副本。我肯定以前有人问过这个问题,但我喜欢这个问题的简短。我不认为
printf(“它的第一个字符是%s\n”,str[1])
将按照您所说的执行:“当您获得第二个字符及其后的所有内容时,直到字符串末尾的\0字符为止”。%s将尝试使用该值作为指针,str[1]将只是一个ASCII字符,您可能会遇到编译器错误或运行时错误。Correct@bruceg。我试图解释为什么OP在将其作为字符串使用时会看到该结果(即,将
initial
定义为
char*
)。我将编辑以更清楚地解释。谢谢!这更有意义。
  char *initial;
  initial = &(str[0]);
in this initial is pointer of character and you store the address of   first character by writing &(str[0]).
if you write %s that means print string from address store in initial and when you store address of second element like &(str[1]) so it print string from 2nd letters. 

So if you want to print only one character you have to write %c instead of %s.


  printf("Its first character is %c\n", initial);