<br>strncpy也是要判断\0的。它的作用是限制拷贝的最大长度,防止缓存区溢出。因此<br>为了提高程序安全性,现在都建议用strncpy代替strcpy。<br>你想说的也许是memcpy,那个是按照指定长度拷贝。<br><br><div class="gmail_quote">2008/12/1 <span dir="ltr"><<a href="mailto:panshizhu@routon.com">panshizhu@routon.com</a>></span><br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
其实 C 语言并没有强制这么做,绝大多数 C 字符串函数都包含按零结尾处理和按指<br>
定长度处理的两种版本。<br>
例如:<br>
strcpy vs strncpy<br>
strcmp vs. strncmp<br>
等等。<br>
因此,即使你使用 C 语言,也完全可以使用一个独立的整数标记字符串长度,然后对<br>
于所有的字符串操作使用带 n 的字符串函数。――显然,直接在 C 语言中这么做,编<br>
程上会比使用零结尾稍微麻烦一些,但如果你使用适当的包装可以规避这些问题。不<br>
要忘了pascal 使用单字节标记导致字符串最大长度 255 的限制,它只运用于教<br>
学,而这种限制对一个实用的语言来说显然是不可接受的。<br>
<br>
事实上我不知道你真的使用任何 profiler 工具测量过没有,实际对于 C 语言字符<br>
串,多数普通情况下两者的效率差距并不大,对实际运行效率的测量很多时候会让人<br>
怀疑自己所学的知识。――也许因为某些理论家从来不做测量。<br>
<br>
当然xml是个把这种差距运用到极致的例子,不过谁又能规避这个问题呢?对于任何脚<br>
本语言的解析都不可能避免字符串搜索以获取结束符的问题,这并不独是xml的,文法<br>
解析效率应当是所有解释型脚本存在的问题。<br>
<font color="#888888">--<br>
Sincerely, Pan, Shi Zhu.<br>
<br>
yarco <<a href="mailto:yarco.w@gmail.com">yarco.w@gmail.com</a>> 写于 2008-11-28 20:49:50:<br>
</font><div class="Ih2E3d">> 恩恩......不过我说的的确是执行效率......<br>
><br>
> 我买过一本叫"Joey说软件"书. 那里开篇提到的那个文章很经典, 从c语言字符<br>
> 串一直谈到为什么xml执行效率不高.<br>
> 好像原因是因为c语言字符串是根据\0来计算结束符的. 这样在很多过程中要判<br>
> 断一个字符串就要从头到尾遍历到\0.<br>
> 而delphi(好像是delphi)字符串是把那个\0 1byte让出来, 用来存放长度(所<br>
> 以delphi字符串长度只能到256.<br>
> 再长就得用StringBuilder)...xml有相似的情况,<br>
> 因为只有结束标记<tag></tag>从程序角度就无法快速处理(假如是个length,<br>
> 就能马上偏移定位)...<br>
><br>
> 不过奇怪理由这么充分...到目前为止似乎也没看过什么变化...<br>
> (据那本书说, excel开发的时候不使用c string, 而内部实现了一个字符串的<br>
> 结构, 这样执行非常高效....)<br>
><br>
><br>
</div><div><div></div><div class="Wj3C7c">_______________________________________________<br>
kde-china mailing list<br>
<a href="mailto:kde-china@kde.org">kde-china@kde.org</a><br>
<a href="https://mail.kde.org/mailman/listinfo/kde-china" target="_blank">https://mail.kde.org/mailman/listinfo/kde-china</a><br>
</div></div></blockquote></div><br>