[C]关于%s,%c的字符串和数组

时间:2018-12-12 10:43:06

标签: c string

为什么我应该在这里使用%c而不是%s? 如果我使用%s将会出错

printf("%c",Array[i]);

当我定义char Array[STRSIZE]="apple"; should use %s here

那么如何正确使用%s和%c?

代码:

#include<stdio.h>
#include<string.h>
   int main(){
      #define STRSIZE 81

         char Array[STRSIZE];
         printf("Enter a string: ");
         gets(Array);
         printf("\nYou entered: ");
         int i ;
    for(i=0;i<strlen(Array);i++){

         printf("%c",Array[i]);
    }
   return 0 ;} 

结果:

Enter a string: apple
You entered: apple

3 个答案:

答案 0 :(得分:6)

%c打印char%s打印一个字符串,因此需要一个指向char的指针。

char Array[STRSIZE];

在这里,Arraychar的数组,因此传递给函数的表达式Array会衰减到指向char的指针。因此它可以用于%s(假设字符串有效)。

Array[i]不是字符串。它是char,因此可以传递给%c,但不能传递给%s。因此可能是:

  • 使用printf("%s",Array);打印字符串
  • 使用printf("%c",Array[i]);打印该字符串的单个字符。通过遍历字符串,您也可以像这样打印整个字符串

答案 1 :(得分:3)

您对"%c"的使用是正确的,但不要使用gets,它已不再是标准的一部分

您可以使用fgets

char arr[STRSIZE] = {0};
char *ptr;

printf("Enter a string: ");
if (fgets(arr, sizeof arr, stdin) {
    // skip the trailing new line
    ptr = strchr(arr, '\n');
    if (ptr != NULL) {
        *ptr = '\0';
    }
}

要打印字符串,只需使用:

printf("%s\n", arr);

答案 2 :(得分:1)

传递给printf的第二个参数的处理方式取决于通过%c%s指定的类型。
%c用于表示char类型,因此该函数将从array [i]指向的存储位置读取数据,该位置将为char大小。
就像当您传递%s时那样,数据类型被视为char数组,因此该函数将读取字节,直到从作为第二个参数传递的内存地址中获取\0为止。
由于您将char类型变量传递给%s,因为类型不匹配,可能会导致运行时错误。