前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言 | 每日基础(92)

C语言 | 每日基础(92)

作者头像
小林C语言
发布2020-10-30 11:19:34
4080
发布2020-10-30 11:19:34
举报

读者:为什么代码: char *p = "hello, worl!"; p[0] = ’H’; 会崩溃?

阿一:字符串实字并不总是可以修改的, 除非是用在字符数组的初试化。试用: char a[] = "hello, world!"。

读者:“Segmentation violation”, “Bus error” 和 “General protection fault” 意味着什么?

阿一:通常, 这意味着你的程序试图访问不该访问的内存地址, 一般是由于堆栈出错 或是不正确的使用指针。可能的原因有: 局部数组溢出;不小心, 用了空指针。未初始化指针、地址未对齐的指针 或其它没有适当分配的指针;malloc 内部被破坏;函数调用参数不匹配, 特别是如果用了指针, 两个可能出错的函数是 scanf() 和 fprintf()。

读者:什么是C语言最好的代码布局风格?

阿一:如果你的编码环境没有建议一个风格, 你也不想发明自己的风格, 可以沿用 K&R 中的风格。“好风格” 的品质并不简单, 它包含的内容远远不止代码的布局细节。不要把时间都花在格式上而忽略了更实质性的代码本身的质量。

读者:用 if(!strcmp(s1, s2)) 比较两个字符串等值,是否是个好风格?

阿一:这并不是个很好的风格, 虽然这是个流行的习惯用法。如果两个字符串相等, 这个测试返回为真, 但 ! (“非”) 的使用, 容易引起误会, 以为测试不等值情况。另一个选择是用一个宏: #define Streq(s1, s2) (strcmp((s1), (s2)) == 0)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-10-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 C语言入门到精通 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档