解决底层管理功能中的UD的建议

| 我是C语言的新手,并开始编写一个小型库,该库具有以下功能:获取字符串长度,反转字符串,将char缓冲区中的二进制数据转换为int和short。仅出于教育目的,并且更好地了解了string.h等中已经可用的低级功能。 问题是我遇到的错误在某种程度上是随机的。我有4个功能:
getStringLength
(获取字符串的长度)
reverseString
(使用XOR替换并使用getStringLength反转字符串以获取长度)
charsToUShort
(将具有两个字节(不计算空项的二进制数据)的char数组指针转换为无符号的short)
charsToUInt
(将具有四个字节(不计算空项)的二进制数据的char数组指针转换为unsigned int) 当我在主函数中测试所有这些函数时,基本上会出现问题。当使用所有功能时,
reverseString
中的迭代器将从
0
变为
length / 2
设置为erator7ѭ。因此,基本上,当迭代字符串的反转时,由于迭代器为
32767
,循环甚至没有开始。尽管它初始化为0。如果我仅将其中3个用于函数,例如,如果我删除了charsToUInt我的主函数,则所有这些函数都可以正常工作。 主要问题 您有什么建议来解决这样的问题? 其他所有建议也非常欢迎! 容易出错的代码以进行澄清
getStringLength
unsigned int getStringLength(char *str){
    unsigned int i = 0;

    while(str[i]){
        i++;
    }

    return i;
}
reverseString
void reverseString(char *str){
    int i, m = 0;
    unsigned int l = getStringLength(str);

    m = l >> 1;

    while(i < m){
        str[i] ^= str[l - 1];
        str[l - 1] ^= str[i];
        str[i] ^= str[l - 1];
        i++;
        l--;
    }
}
charsToUShort
unsigned short charsToUShort(char *str){
    unsigned int l = getStringLength(str);
    unsigned short result = 0;

    if(l != 2){
        return 0;
    }else{
        result |= str[0] << 8;
        result |= str[1] << 0;
        return result;
    }
}
charsToUInt
unsigned int charsToUInt(char *str){
    unsigned int l = getStringLength(str);
    unsigned int result = 0;

    if(l != 4){
        return 0;
    }else{
        result |= str[0] << 24;
        result |= str[1] << 16;
        result |= str[2] << 8;
        result |= str[3] << 0;
        return result;
    }
}
测试输出以进行澄清 这是测试结果错误的输出:
0: reverseString failed! Expected value: \'olleH\', actual value: \'Hello\'
1: charsToUShort passed! Expected value: \'0x6261\', actual value: \'0x6261\'
2: charsToUInt passed! Expected value: \'0x62616364\', actual value: \'0x62616364\'
这是预期的结果:
0: reverseString passed! Expected value: \'olleH\', actual value: \'olleH\'
1: charsToUShort passed! Expected value: \'0x6261\', actual value: \'0x6261\'
2: charsToUInt passed! Expected value: \'0x62616364\', actual value: \'0x62616364\'
    
已邀请:
您的代码仅将
m
设置为零,
i
未初始化,需要
int i = 0, m = 0;
,否则循环将永远不会执行一次迭代     

要回复问题请先登录注册