相关疑难解决方法(0)

strcmp()和signed/unsigned字符

我对strcmp()感到困惑,或者更确切地说,它是如何由标准定义的.考虑比较两个字符串,其中一个字符串包含ASCII-7范围之外的字符(0-127).

C标准定义:

int strcmp(const char*s1,const char*s2);

strcmp函数将s1指向的字符串与s2指向的字符串进行比较.

strcmp函数返回一个大于,等于或小于零的整数,因为s1指向的字符串大于,等于或小于s2指向的字符串.

参数是char *.没有unsigned char *.没有任何概念"比较应该作为unsigned".

但是,所有我检查认为"高"字标准库是公正的,更高的值比ASCII-7字符.

我理解这是有用的和预期的行为.我不想说现有的实现是错误的.我只是想知道,我错过了标准规格中的哪一部分

int strcmp_default( const char * s1, const char * s2 )
{
    while ( ( *s1 ) && ( *s1 == *s2 ) )
    {
        ++s1;
        ++s2;
    }
    return ( *s1 - *s2 );
}

int strcmp_unsigned( const char * s1, const char *s2 )
{
    unsigned char * p1 = (unsigned char *)s1;
    unsigned char …
Run Code Online (Sandbox Code Playgroud)

c standards

16
推荐指数
1
解决办法
8083
查看次数

标签 统计

c ×1

standards ×1