C: 自定义 strlen() 库函数

标签 c types char sizeof strlen

我创建了我的 strlen() 函数版本。

unsigned int my_strlen(char *p)
{
    unsigned int i = 0;

    while(*p!='\0')
    {
        i++;
        p++;
    }

    return i;
}

每次运行时它都会给我正确的输出。但是我的同事说这段代码可能会在字符长度大于 1 字节 的系统上引起问题。是这样吗??

于是他们修改了代码如下:

unsigned int my_strlen(char *p)
{
    unsigned int i = 0;
    char *start = p;

    while(*p!='\0')
    {
        i++;
        p++;
    }

    return p - start;
}

我一直认为在 C 中一个字符是 1 个字节长。

前者的片段是否优于后者,反之亦然??

最佳答案

在 C 中保证 sizeof(char) 为 1,所以你是对的。

为了增加一些真实性,直接引用 C11,章节 §6.5.3.4,sizeof_Alignof 运算符

When sizeof is applied to an operand that has type char, unsigned char, or signed char, (or a qualified version thereof) the result is 1. [....]

就是说,指针算法尊重数据类型,所以第二种方法无论如何在预期方面没有任何意义。在这两种情况下,您都在 p 上操作,它是 char*,所以效果是一样的。

关于C: 自定义 strlen() 库函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39438991/

相关文章:

c - Linux 和 Windows 上结构的不同值

java - 是否有 Eclipse 交互式调试工具来评估类型属性?

C++ 将 char** 分配给字符串数组

使用 strtok_s 从 char* 文本创建动态 char* 数组

将 const char* 复制到 c 中的字符串

c - 段错误和链表的未知问题

c - C 动态初始化数组时出错

C格式字符串问题

windows - 在类型命令批处理文件中隐藏文件名

curl - 如何创建 ElasticSearch 类型并使其可在索引内搜索