代码如下:
当我使用行printf(ch)
运行程序时,它表示项目无法执行。但是当我使用占位符时,项目工作得很好。知道为什么会这样吗?
#include <stdio.h>
#include <stdlib.h>
int main()
{
char arr[10];
printf("Enter a password. \n");
scanf("%s",arr );
// printf(arr);
char ch;
int i;
for (i=0; i<10; i++)
{
ch=arr[i];
printf(ch);
//printf("%c",ch);--> if i use this instead of printf(ch) it works fine. Can this please be explained
}
}
答案 0 :(得分:1)
这是因为printf
期望参数应该在const char*, ...
作为输入参数,而
char ch;
不是指针类型
所以你“可以”做:
char ch = 'A';
printf(&ch); //this is bad because not only it is not well-formatted but also, though compiled, may cause undefined behavior. This is to only show you the idea
但不能这样做:
char ch = 'A';
printf(ch);
编辑(paddy
更正后):
使用printf
打印它的正确方法是使用为角色提供的打印格式
char ch = 'A';
printf("%c", ch);
希望它可以提供帮助。
答案 1 :(得分:0)
当你骗到编译器时,你有什么期望? : - )
在printf
中声明的<stdio.h>
函数的原型是
int printf(const char *format, ...);
表示必须给出第一个参数,它必须是指向char 的类型。
如果您将printf传递给char
,那么这被错误地解释为指向char的指针,从而在C语言中导致未定义的行为。
向编译器说实话,它会合作。找到真相从阅读您使用的库函数的文档开始,并启用编译器提供的所有警告。几乎所有现代编译器都很容易捕获到这一点。
PS:使用适当的术语也有助于沟通问题。您所谓的占位符称为参数,或者更具体地说,是格式。