小弟最近在上CS50刚看完C的两个单元
写作业的时候碰到个问题
为什么当我想print出单一个字符的时候
不能这样写:
printf('a');
编译时会提示 format string is not a string literal
而是应该这样写:
printf("a");
或是这样写:
printf("%c", 'a');
单引号不是代表一个字符吗?
为何printf一个字符的时候不能使用单引号?
孤狗也孤狗不太到答案
不知道是不是有什么细节我有漏掉的?
作者: kaneson (Lance) 2017-01-09 14:49:00
函式可以传多种type参数是后来才发明的,中间有很多演进才到python那样任意传。还有printf本身也是新手最早要接触到而有一定基础才能理解的函式
因为第一个引数要const char* 你传char当然不行孤狗printf 文件写得蛮清楚的...查error message也很多说明...
作者:
poyenc (发箍)
2018-12-30 10:36:00没看过 CS50 不过看心得好像很浅.. 你对函式的认知是?
作者:
LPH66 (-6.2598534e+18f)
2018-12-30 20:16:00建议你去找本 C 语言初学的书从头看C 和 python 有一些语言设计上的不同
稍微看过是能期待懂什么?完整看完好好描述自己的问题,这样别人要讲要教也比较好教
作者:
poyenc (发箍)
2018-12-31 17:37:00简单说, 函式收的参数型别是固定的, 如果它吃的是 type*引数就会需要用 & 对 type 变量取址得来, 另外也可以让阵列 decay 而来, string literal 就是 char 阵列 (但隐藏最后的 '\0' 字符, "hello" 阵列长度是 6, 当成字串长则是5, 你要把变量当成指标丢肯定是不行的
作者:
MaxHaru (懂得放手..才是王道)
2017-01-14 17:00:00'a'等于0x61, 是一个常数, "a"等于0x61,0x00..