#include <stdio.h>
#include <string.h>
void main()
{
char array[]="hello";
printf("%s",array[0]);
printf("%c",array[0]);
}
使用 %s 时无法访问数组 [0],但使用 %c 时无法访问数组 [0],请帮我找到解决方案。
您应该在与 %s 一起使用时使用地址 ==>&array[0]
因为 %s 需要一个指针作为参数。
通常我们使用
printf("%s",character_array_name);
这里 character_array_name 是第一个元素的地址
character_array_name == &character_array_name[0];
如果你只想打印一个字符,你需要使用
printf("%.1s",character_array_name);
示例代码:
#include<stdio.h>
int main()
{
char *str="Hello World";
printf("%s\n",str); //this prints entire string and will not modify the pointer location but prints till the occurence of Null.
printf("%.1s\n",str); //only one character will be printed
printf("%.2s\n",str); //only two characters will be printed
//initially str points to H in the "Hello World" string, now if you increment str location
str++; //try this str=str+3;
printf("%.1s\n",str); //only one character
printf("%.2s\n",str); //only two characters will be printed
str=str+5; //prints from the W
printf("%s\n",str); //this prints upto Hello because scanf treats space or null as end of strings
printf("%.1s\n",str); //only one character
printf("%.2s\n",str); //only two characters will be printed
return 0;
}
尽管您已经接受了答案,但我认为我的回答可以以某种方式帮助您。
字符串文字是一系列字符,您可以array
像这样可视化:
+---+---+---+---+---+----+
array: | h | e | l | l | o | \0 |
+---+---+---+---+---+---+-
^
|
array[0]
printf
是一个可变参数函数,在您指定它们之前它对它的参数一无所知,因此当它看到%c
格式说明符时,它假定下一个参数将是一个存储字符的变量,在这种情况下,它array[0]
就是字符h
存储在数组的索引 0 。
现在,当printf
看到 a时%s
,它假定下一个参数将是指向"hello"
您希望它打印的字符串文字 () 的指针,在这种情况下array[0]
不是指针,您应该将其放在array
中printf
,请注意数组名称不是指针,但数组名称衰减为指针
此外,你应该使用它int main(void)
来代替void main
它的标准。