前馈科技

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 571|回复: 0

C语言字符串

[复制链接]

97

主题

97

帖子

539

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
539
发表于 2022-1-22 09:45:08 | 显示全部楼层 |阅读模式
近日用到了c语言字符串的比较,大概背景如下:
我申请了一个 char name[4]并往里面存FOC0字符串,之后我将name存入FLASH中,然后从FLASH中读出来并调用int strcmp(FAR const char *cs, FAR const char *ct)和FOC0进行比较,奇怪的是比对总是失败,strcmp函数实现如下:
  1. int strcmp(FAR const char *cs, FAR const char *ct)
  2. {
  3.   register signed char result;
  4.   for (; ; )
  5.     {
  6.       if ((result = *cs - *ct++) != 0 || !*cs++)
  7.       break;
  8.     }

  9.   return result;
  10. }
复制代码

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


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

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|计算机控制

GMT+8, 2024-4-24 14:07 , Processed in 0.049006 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表