找回密码
 立即注册
查看: 2179|回复: 26

C251编译器问题:函数第3参数不能在函数内计算

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-05-04 18:55:47

2

主题

15

回帖

56

积分

注册会员

积分
56
发表于 2024-8-20 17:09:53 | 显示全部楼层 |阅读模式
#include "stc32g.h"               
#include "intrins.h"
#include <string.h>
unsigned char buf1[8];
unsigned char buf2[8];
void zmemcopy(unsigned char * destptr, unsigned char * sourptr, unsigned int len) //数据拷贝
{
while(len>0)
  {
        *destptr=*sourptr;
        destptr++;
        sourptr++;
        len--;
  }
}
int main(void)
{
  zmemcopy(buf1, buf2, 8);
  while(1);
}
C25编译此函数后,在KeilC环境下仿真。发现进入此函数运行时,第3个参数的值一直不变,导致循环出不来,前2个参数的值是正常递增的。
是不是C251编译器有问题?

回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:205
  • 最近打卡:2025-07-20 00:42:08

19

主题

37

回帖

244

积分

中级会员

积分
244
发表于 2024-8-20 17:38:55 | 显示全部楼层
C语言的memcpy可以用吗

点评

memcpy只能复制字符串,因为遇到0x00返回  详情 回复 发表于 2024-8-20 17:43
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:537
  • 最近打卡:2025-08-24 01:00:11
已绑定手机

86

主题

5979

回帖

1万

积分

超级版主

积分
10832
发表于 2024-8-20 17:43:46 | 显示全部楼层
小白*** 发表于 2024-8-20 17:38
C语言的memcpy可以用吗

memcpy只能复制字符串,因为遇到0x00返回
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:505
  • 最近打卡:2025-08-23 08:45:03

33

主题

2504

回帖

5379

积分

论坛元老

积分
5379
发表于 2024-8-21 09:06:01 | 显示全部楼层
Debu*** 发表于 2024-8-20 17:43
memcpy只能复制字符串,因为遇到0x00返回

遇0返回的不是strcpy?  memcpy我记得有输入长度的啊

点评

记错了,遇0返回是strncpy [attachimg]54288[/attachimg]  详情 回复 发表于 2024-8-21 09:28
那是memncpy,中间多个n,给长度也是遇0返回  详情 回复 发表于 2024-8-21 09:19
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:505
  • 最近打卡:2025-08-23 08:45:03

33

主题

2504

回帖

5379

积分

论坛元老

积分
5379
发表于 2024-8-21 09:07:26 | 显示全部楼层
Debu*** 发表于 2024-8-20 17:43
memcpy只能复制字符串,因为遇到0x00返回

你的意思是,,即使参数中有长度,,在长度内如果遇到0 会提前返回?
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:537
  • 最近打卡:2025-08-24 01:00:11
已绑定手机

86

主题

5979

回帖

1万

积分

超级版主

积分
10832
发表于 2024-8-21 09:19:39 | 显示全部楼层
_奶*** 发表于 2024-8-21 09:06
遇0返回的不是strcpy?  memcpy我记得有输入长度的啊

那是memncpy,中间多个n,给长度也是遇0返回
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:537
  • 最近打卡:2025-08-24 01:00:11
已绑定手机

86

主题

5979

回帖

1万

积分

超级版主

积分
10832
发表于 2024-8-21 09:28:51 | 显示全部楼层
_奶*** 发表于 2024-8-21 09:06
遇0返回的不是strcpy?  memcpy我记得有输入长度的啊


记错了,遇0返回是strncpy
截图202408210928221306.jpg
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-05-04 18:55:47

2

主题

15

回帖

56

积分

注册会员

积分
56
发表于 2024-8-21 11:10:37 | 显示全部楼层
你们没有明白这问题的意思。这个问题在于函数内len--这条语句执行无效
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-05-04 18:55:47

2

主题

15

回帖

56

积分

注册会员

积分
56
发表于 2024-8-21 11:14:51 | 显示全部楼层
Debu*** 发表于 2024-8-20 17:43
memcpy只能复制字符串,因为遇到0x00返回

memcpy没有试过。我写这个函数例子,只是为了说明C251编译器在处理第3个参数时无效。说明C251编译器有问题
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-08-22 18:38:26

2

主题

195

回帖

1128

积分

金牌会员

积分
1128
发表于 2024-8-21 11:44:20 | 显示全部楼层
用的哪种CPU,STC32G12K128没问题
回复

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-8-24 09:08 , Processed in 0.124806 second(s), 110 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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