网站开发一般要多少钱,网站用的是什么语言,建设银行企业信息门户网站,中秋节网页制作素材由于历史的原因#xff0c;C、C字符串是个很让程序员头疼的东西。 字符串被解读为字符数组#xff0c;但是又不等价于字符数组#xff0c;而是带有附加的结束符的字符数组。 结束符‘\0’也是一个字符#xff0c;但是又不计算在字符串长度里面#xff08;strlen#xff0… 由于历史的原因C、C字符串是个很让程序员头疼的东西。 字符串被解读为字符数组但是又不等价于字符数组而是带有附加的结束符的字符数组。 结束符‘\0’也是一个字符但是又不计算在字符串长度里面strlen。 字符串通常用字符指针来访问但是很多情形函数的char*参数要求的并不是一个字符串并不要求一定有结束符。 内存复制函数一般也用char*做参数经常会有人犯错发现内存复制后的内容输出的时候后面多了一些乱码这其实就是因为这个char*后面没有结束符。用memcpy复制字符串的strlen个字符当然会失去最后的结束符。 问题出在哪里呢问题就出在最初设计C语言的时候偷懒了字符串不是字符数组是一种特殊的对象不应该用字符数组代替字符串。当然了我们知道C语言设计之初更多考虑的是性能用char*表达字符串是一个合理的设计 这是设计的一个基本原则最重要的是概念完整性。 概念准确没有歧义不特化不弱化这是最高境界。设计失败的系统多多少少都跟概念设计错误有关。错误的概念会诱使程序员和用户犯错。 高级编程语言没有指针当然也没有这些混乱。不过话说回来又是字符串对象、又是字节数组对象互相转换又麻烦char *多美妙啊。 这里是结束