This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 编译器/CC3220:缺少strnlen?

Guru**** 2577385 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/598070/compiler-cc3220-missing-strnlen

部件号:CC3220

工具/软件:TI C/C++编译器

TI ARM编译器是否不支持strnlen?  我已包含string.h,但我在其中未看到列出的函数,我收到一个错误,表示它无法找到它。

此致,Blake

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如果不提供,我不会感到惊讶,我认为它不是标准C或C++的一部分。  C11有一个类似的函数strnlen_s,但它可能还没有进入CGT。

    您可能可以在线找到通用实现的源代码;或者您也可以使用memchr来创建自己的源代码。  根据使用案例的不同,您可能能够使用诸如must迭代和restrict _nassert之类的优化来使事情变得更有趣味

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我发现一个似乎有效的实施。  我做了一些轻微的修改,并将其放在platform_config标题中,这样,如果编译器没有strnlen,我就可以添加一个预定义符号(MY_STRNLEN)

    #ifdef my_STRNLEN
    static inline size_t strnlen (const char *string, size_t length)
    {
    char *ret = memchr (字符串,0,长度);
    返回台? RET - string : length;
    }
    #endif 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的分享。

    遗憾的是,TI编译器RTS库中没有strnlen的变体,也没有添加变体的计划。

    谢谢,此致,

    -George

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢乔治!