1
#include <stdio.h>
#include <string.h>
void main()
{
char array[]="hello";
printf("%s",array[0]);  
printf("%c",array[0]);  
}

使用 %s 时无法访问数组 [0],但使用 %c 时无法访问数组 [0],请帮我找到解决方案。

4

2 回答 2

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;
}
于 2013-09-10T10:25:32.307 回答
0

尽管您已经接受了答案,但我认为我的回答可以以某种方式帮助您。

字符串文字是一系列字符,您可以array像这样可视化:

         +---+---+---+---+---+----+
  array: | h | e | l | l | o | \0 | 
         +---+---+---+---+---+---+-
           ^
           | 
          array[0]

printf是一个可变参数函数,在您指定它们之前它对它的参数一无所知,因此当它看到%c格式说明符时,它假定下一个参数将是一个存储字符的变量,在这种情况下,它array[0]就是字符h存储在数组的索引 0 。

现在,当printf看到 a时%s,它假定下一个参数将是指向"hello"您希望它打印的字符串文字 () 的指针,在这种情况下array[0]不是指针,您应该将其放在arrayprintf,请注意数组名称不是指针,但数组名称衰减为指针

此外,你应该使用它int main(void)来代替void main它的标准。

于 2013-09-10T17:52:19.623 回答