为什么我应该在这里使用%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
答案 0 :(得分:6)
%c
打印char
。 %s
打印一个字符串,因此需要一个指向char
的指针。
char Array[STRSIZE];
在这里,Array
是char
的数组,因此传递给函数的表达式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
,因为类型不匹配,可能会导致运行时错误。