C编程:Codeblocks停止使用C直到我进行微小的更改。知道为什么吗?

时间:2015-12-16 05:33:43

标签: c codeblocks

代码如下:
当我使用行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

    }
}

2 个答案:

答案 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:使用适当的术语也有助于沟通问题。您所谓的占位符称为参数,或者更具体地说,是格式