【发布时间】:2020-08-13 11:15:19
【问题描述】:
我是一个 C 编程新手。
通过其他问题的答案,我可以理解“字符”一词可能指向不同的元素;例如字母和数字。
我将“字符串”视为字符。
那么,请看下面几行:
#include <stdio.h>
main()
{
int numbers = 123;
printf("%c%s\n", "N", numbers);
}
当我尝试编译此代码时,显示错误消息并且编译失败。
教科书“The C Programming Language”第 13 页如下所述关于 printf 格式说明符;
“
%c代表人物”“
%s为字符串”。
第一个问题:
虽然“N”是字符,为什么%c说明符无效?
第二个问题:
虽然变量“numbers”的值为“123”,但它们是数字,包含在字符中。
我认为字符等于“字符串”。
那我虽然用%s来表示“123”,但是为什么无效呢?
我知道我的代码会起作用,如果我像下面这样修改它们:
#include <stdio.h>
main()
{
int numbers = 123;
printf("%s%d\n", "N", numbers);
}
但我想了解为什么上面的代码无效。
【问题讨论】:
-
"N"不是一个字符。它是一个字符串字面量,由一个字符(以及终止的空字符,它是隐式的)组成。 -
欢迎来到 SO。请不要添加大量不相关的标签。这被认为是垃圾邮件。如果您对 C 标准函数有疑问,则无需添加
bash或unix标签。 -
main()在 C 中已经有一段时间无效了。这是你教科书中的时代错误之一。你应该总是写int main(void)。 -
@CaptainCookie 你应该使用
int main(void)。省略void可能适用于大多数实现,但不能保证有效。省略int会导致隐含的int返回值,但它的形式不好。 -
@CaptainCookie 用
(void)参数列表声明一个函数只是意味着该函数不接受任何参数。由于遗留原因,使用空的()参数列表声明函数意味着未指定参数。永远不要在函数声明中使用空的()参数列表。