作者nekosgr93 (cat@mantis)
看板C_and_CPP
标题[问题] printf 和 引号问题
时间Sun Dec 30 03:55:04 2018
小弟最近在上CS50刚看完C的两个单元
写作业的时候碰到个问题
为什麽当我想print出单一个字元的时候
不能这样写:
printf('a');
编译时会提示 format string is not a string literal
而是应该这样写:
printf("a");
或是这样写:
printf("%c", 'a');
单引号不是代表一个字元吗?
为何printf一个字元的时候不能使用单引号?
孤狗也孤狗不太到答案
不知道是不是有什麽细节我有漏掉的?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 223.137.177.17
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1546113306.A.ADB.html
1F:推 steve1012: 因为第一个引数要const char* 你传char当然不行12/30 04:00
2F:→ steve1012: 孤狗printf 文件写得蛮清楚的...查error message也很多12/30 04:01
3F:→ steve1012: 说明...12/30 04:01
4F:→ poyenc: 没看过 CS50 不过看心得好像很浅.. 你对函式的认知是?12/30 10:36
真的很浅XDD C语言的部分data type还有一些基本的控制流跟条件判断上完就没了
小弟是写python的没上过计概想说补点基础才看CS50
函式不是接受一个或多个input然後return一个output吗
5F:推 alan23273850: printf 只能吃字串,不能吃字元12/30 14:26
好奇为什麽是吃字串
昨天稍微额外看了一下pointer的概念
printf的输入const char *format不是应该吃一个位置吗
而那个位置的类型是字元
怎麽样都跟字串连不上吧
※ 编辑: nekosgr93 (223.137.177.17), 12/30/2018 16:31:55
※ 编辑: nekosgr93 (223.137.177.17), 12/30/2018 16:33:41
6F:推 tomsawyer: 不是传pointer吗(?)12/30 17:56
7F:推 LPH66: 建议你去找本 C 语言初学的书从头看12/30 20:16
8F:→ LPH66: C 和 python 有一些语言设计上的不同12/30 20:17
好的
会再找相关教材补充
毕竟我也蛮想学C的
※ 编辑: nekosgr93 (223.137.177.17), 12/30/2018 20:23:06
9F:→ b0920075: 稍微看过是能期待懂什麽?完整看完好好描述自己的问题 12/31 11:00
10F:→ b0920075: ,这样别人要讲要教也比较好教 12/31 11:00
11F:→ poyenc: 简单说, 函式收的参数型别是固定的, 如果它吃的是 type* 12/31 17:37
12F:→ poyenc: 引数就会需要用 & 对 type 变数取址得来, 另外也可以让 12/31 17:38
13F:→ poyenc: 阵列 decay 而来, string literal 就是 char 阵列 (但隐藏 12/31 17:39
14F:→ poyenc: 最後的 '\0' 字元, "hello" 阵列长度是 6, 当成字串长则是12/31 17:41
15F:→ poyenc: 5, 你要把变数当成指标丢肯定是不行的12/31 17:42
不好意思因为刚看完课程写作业就遇到问题 课程上也没特别提到才会问这种奇怪的问题X
D(毕竟CS50的课程目标也不是教C语言)
昨天翻了一整天孤狗大概是弄懂发生什麽事了
会在从基础开始看的
感谢大家愿意回答小弟的蠢问题
※ 编辑: nekosgr93 (223.137.177.17), 12/31/2018 19:50:48
16F:推 kaneson: 函式可以传多种type参数是後来才发明的,中间有很多演进 01/09 14:49
17F:→ kaneson: 才到python那样任意传。还有printf本身也是新手最早要接 01/09 14:49
18F:→ kaneson: 触到而有一定基础才能理解的函式 01/09 14:49
19F:→ MaxHaru: 'a'等於0x61, 是一个常数, "a"等於0x61,0x00.. 01/14 17:00