feedforward 发表于 2022-1-22 09:45:08

C语言字符串

近日用到了c语言字符串的比较,大概背景如下:
我申请了一个 char name并往里面存FOC0字符串,之后我将name存入FLASH中,然后从FLASH中读出来并调用int strcmp(FAR const char *cs, FAR const char *ct)和FOC0进行比较,奇怪的是比对总是失败,strcmp函数实现如下:
int strcmp(FAR const char *cs, FAR const char *ct)
{
register signed char result;
for (; ; )
    {
      if ((result = *cs - *ct++) != 0 || !*cs++)
      break;
    }

return result;
}
开始我怀疑strcmp函数实现有问题,可是strcmp函数是标准C语言函数啊!仔细分析strcmp函数盘结尾的条件:   !*cs++
即,字符串的末尾得是0,否则将一直比下去,迟早不等,查阅相关资料有了发现:
当你要将一个已存在的字符串与你输入的字符串比较时原有的字符串末尾是必须带’\0’的否则会出现一直不相等的情况。
因为你输入的字符串,C语言会默认在末尾补‘\0’,作为结束标志。如果原有的字符串末尾没有,就会出错!在标准输入流输入的字符串会在末尾自动‘\0’,所以对已知字符串初始化时要补‘\0’.
否则比较是会出错!

综上所属,我的问题在于,申请的字符数组长度为4,而里面存了4个字符,没法存字符串结束符‘\0’了,最终strcmp函数找不到结尾,一直比下去,就出问题了

页: [1]
查看完整版本: C语言字符串