C语言 为什么需要转换字符?

  • 本文关键字:转换 字符 语言 c printf
  • 更新时间 :
  • 英文 :


当我运行这个时:

#include <stdio.h>
int main() {

int x = 1;

printf(x, "n");

return 0;
}

它给了我这些错误:

线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x1(

格式字符串不是字符串文本(可能不安全(

将字符串视为参数以避免这种情况

不兼容的整数到指针转换将"int"传递给类型为"const char *"的参数

它输出:

(分行(

但是,当我将其更改为:

printf("%s", x);

它工作得很好。(输出"1",如预期的那样(

为什么需要转换字符(例如 %s、%d 等(?

它们需要告诉printf函数您传递的参数的类型(和数量(。

该语言没有允许函数动态确定这一点的机制,因此格式字符串为其提供了解码它们的线索。

格式字符串始终是第一个参数,因为被调用的函数始终可以在同一个位置访问该参数。像printf这样的函数通常仍然是用C编写的,所以只能使用语言提供的那些函数。

它们的参数不是"转换字符"。我认为您的困惑来自这样一个事实,即您认为printf只是打印所有参数并自动推断如何打印每个参数。但是,printf不能那样工作,因为 C 不支持重载。

具体来说,第一个论点与其他论点不同。它不是要打印的东西,而是一个格式字符串。通过尝试以下方法,您可以轻松了解它的含义:

printf("My friend %s has %d coins!", "John", 123);

这将打印:

My friend John has 123 coins!

%s此处指定第一个参数(在格式字符串之后(将被解释为字符串,%d表示第二个参数(再次,在格式字符串之后(将被理解为整数。两者都将替换为参数中的实际值。

最新更新