gpt4 book ai didi

c - C 中的字符串 : pitfalls and techniques

转载 作者:太空狗 更新时间:2023-10-29 16:45:32 26 4
gpt4 key购买 nike

下个月我将指导一个 ACM 团队(请看图),现在是时候讨论 C 中的字符串了。除了讨论标准库、strcpystrcmp 等,我想给他们一些提示(比如 str[0] 等同于 *str 之类的东西)。

您是否知道任何列表(如备忘单)或您自己在这方面的经验?

我已经知道 ACM 竞赛的书籍(这些书很好,具体参见 this ),但我正在寻找交易技巧。

谢谢。

编辑:非常感谢大家。我将接受投票最多的答案,并适本地投票支持我认为相关的其他答案。我希望在这里做一个总结(就像我做的一样 here ,尽快)。我现在有足够的 Material ,而且我确信这极大地改进了弦乐类(class)。再次感谢。

最佳答案

这很明显,但我认为重要的是要知道字符串只不过是 一个字节数组,由零字节分隔。C 字符串并不像您可能知道的那样对用户友好。

  • 在字符串中的某处写入一个零字节将截断它。
  • 越界通常以失败告终。
  • 永远不要使用 strcpy、strcmp、strcat 等,而是使用它们的安全变体:strncmp、strncat、strndup...
  • 避免使用 strncpy。 strncpy 不会总是零分隔您的字符串!如果源字符串不适合目标缓冲区,它会截断该字符串,但不会在缓冲区末尾写入空字节。此外,即使源缓冲区比目标缓冲区小很多,strncpy 仍会用零覆盖整个缓冲区。我个人使用 strlcpy。
  • 不要使用 printf(string),而是使用 printf("%s", string)。尝试考虑如果用户在字符串中放入 %d 的后果。
  • 您不能将字符串与
    if( s1 == s2 )
    doStuff(s1);
    进行比较您必须比较字符串中的每个字符。使用 strcmp 或更好的 strncmp。
    if( strncmp( s1, s2, BUFFER_SIZE ) == 0 )
    doStuff(s1);

关于c - C 中的字符串 : pitfalls and techniques,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1290865/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com