搜索
bottom↓
回复: 8

C基础不好,被字符串单个元素赋值问题虐哭

[复制链接]

出0入213汤圆

发表于 2019-12-23 01:10:34 | 显示全部楼层 |阅读模式
本帖最后由 jyrpxj 于 2019-12-23 02:50 编辑

不得不承认自己太辣鸡了。 虽然写过N多单片机程序,但很多基础知识都没掌握。 说出来让大家嘲笑一下吧, 随便向大家请教。

main.c文件里

  1. #include "XX.h" //(头文件不列举了)
  2. #include <string.h>

  3. //全局变量
  4. const char wb1[]="0:00000000.txt"; // 常量 文件名 2..9为序号
  5. char wjm[16];

  6. //主函数
  7. int main(void)
  8. {
  9.         //初始化部分(略)
  10.         strcpy(wjm,wb1); //给字符串变量赋初始值 ,这里是OK的, 调试中可以看到wjm[0]是“0” 然后依次是“:00000000.txt” ,wjm[15] [16] 都是 二进制值0x00,
  11.         while (1)
  12.         {
  13.         //新建以wjm变量为文件名的文档
  14.         //(新建文件) 这个代码正常,因为可以看到已经有一个名为00000000.txt的文件了。

  15.         //现在要wjm 这个字符串变量从[2]到[9] 这8个元素每次变化一次,"0:00000000.txt"   "0:00000001.txt"  "0:00000002.txt" .... "0:00000999.txt"  "0:00001000.txt"  等等
  16.         wjminc(wjm);  //[color=Red](这部分我写的函数好像没有被编译,也没有提示出错,所以没有看到 wjm 这个字符串变量,  调试中下接跳过了这一行)[/color]
  17.         //调试时跳过了上面的函数,到达了这里,[color=Red]没有看到 wjm 变化[/color]
  18. [color=Red]
  19. [/color]
  20.         HAL_Delay(30000); //
  21.         }
  22. }

  23. void wjminc(char *wb)    [color=Red]//让指定的字符串的第2到第9个元素组成的数值每调用一次递增1  为什么不会被编译 ?[/color]
  24. {
  25.         uint8_t i;
  26.         uint8_t a;
  27.         for(i=9;i<2;i--)
  28.         {
  29.                 a=(uint8_t)wb[i];
  30.                 a++;
  31.                 wb[i]=(char)a;
  32.                 if(a>0x39) //  >“9”
  33.                 {
  34.                         a=0x30;
  35.                         wb[i]=(char)a;   // “0”
  36.                 }
  37.                 else
  38.                 {
  39.                         break;
  40.                 }
  41.         }
复制代码


--------------------------编辑--------------------------
回应2楼主,新增截图。呼叫坛主看看wb在纯文本模式中是显示的,在不是纯文本模式就不显示了???问题大概已经查到原因
for(i=9;i<2;i--)  //这里的for循环永远不会执行,所以编译器直接跳过了。果然是太辣鸡。
改为for(i=9;i>=2;i--) 应该是没问题了。


--------------------------编辑--------------------------


  1. wb[i]  //要这样写才能显示[i] , 不然[i]不显示,且后面的字全为斜体。

复制代码

按坛友说的办法把贴上的程序代码以代码格式显示了。学习了。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2019-12-23 01:10:35 | 显示全部楼层
首先说代码可读性实在太差了
猛地一瞅,就是 wb=(char)a; 这一句赋值在干啥,把 char 类型的数值赋给一个指针类型变量,如果要改值起码要 *wb = ... 吧,还有很多其他问题,楼主先看看书吧

出0入213汤圆

 楼主| 发表于 2019-12-23 01:37:35 | 显示全部楼层
wudicgi 发表于 2019-12-23 01:16
首先说代码可读性实在太差了
猛地一瞅,就是 wb=(char)a; 这一句赋值在干啥,把 char 类型的数值赋给一个指 ...

这个是论坛的显示问题,我代码里是有 wb 的 已编辑了楼主贴。问题应该出在我那个for循环,我搞错了比较符号,导致循环体永远不会执行,编译器直接给我忽略了。

哎,N多遇到的难解的问题, 最后都是自己写代码不够认真,导致去找问题时简直要怀疑人生。

而真正的难解的,网上查查资料,问问坛友,几乎都能解决。唯有这种标点符号,字母的错误,反而最费神。

出0入213汤圆

 楼主| 发表于 2019-12-23 01:39:45 | 显示全部楼层
本帖最后由 jyrpxj 于 2019-12-23 01:41 编辑

我来测试一下 下一行我要发的是 wb 中括号 i 中括号

wb

给二楼的回复也是出BUG了,我没有用到斜体。郁闷啊

出0入0汤圆

发表于 2019-12-23 02:01:21 | 显示全部楼层
  1. [i][/i]
复制代码


这个是 bbcode 的斜体样式,最好用插入代码的格式 [ code ] [ / code ]

出0入0汤圆

发表于 2019-12-23 09:07:53 | 显示全部楼层
我会用一个变量,用sprintf转换为所用格式,在连接扩展名

出0入0汤圆

发表于 2019-12-23 09:09:01 来自手机 | 显示全部楼层
jyrpxj 发表于 2019-12-23 01:37
这个是论坛的显示问题,我代码里是有 wb 的 已编辑了楼主贴。问题应该出在我那个for循环,我搞错了比较符 ...

字符串 简单粗暴是打印sprintf

出0入0汤圆

发表于 2019-12-23 15:45:57 | 显示全部楼层
本帖最后由 supertankhzt 于 2019-12-23 15:55 编辑

第32行:        for(i=9;i<2;i--)

i都等于9了怎么还可能会小于2?
整个函数只有这么一个循环,循环都进不去,当然直接优化掉了。

原来楼主已经解决了,不过我也就花了一分钟就找到BUG,写代码还是要仔细呀。


为了提高代码可读性建议把
if(a>0x39) //  >“9”
改为
if(a>'9')
简洁明了

出0入4汤圆

发表于 2019-12-23 15:59:16 | 显示全部楼层
建议不要随便改LZ位的帖子,改的话,也保留一下原贴内容
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-20 21:30

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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