找回密码
 立即注册
查看: 1536|回复: 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
  • 打卡总天数:204
  • 最近打卡:2025-04-02 13:56:58

19

主题

37

回帖

236

积分

中级会员

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

点评

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:468
  • 最近打卡:2025-06-16 07:06:57
已绑定手机

79

主题

5131

回帖

9138

积分

超级版主

DebugLab

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

memcpy只能复制字符串,因为遇到0x00返回
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:462
  • 最近打卡:2025-06-16 10:02:39

33

主题

2447

回帖

5168

积分

论坛元老

积分
5168
发表于 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
  • 打卡总天数:462
  • 最近打卡:2025-06-16 10:02:39

33

主题

2447

回帖

5168

积分

论坛元老

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

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:468
  • 最近打卡:2025-06-16 07:06:57
已绑定手机

79

主题

5131

回帖

9138

积分

超级版主

DebugLab

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

那是memncpy,中间多个n,给长度也是遇0返回
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:468
  • 最近打卡:2025-06-16 07:06:57
已绑定手机

79

主题

5131

回帖

9138

积分

超级版主

DebugLab

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


记错了,遇0返回是strncpy
截图202408210928221306.jpg
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数: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编译器有问题
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-05-16 11:56:09

2

主题

186

回帖

1058

积分

金牌会员

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

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-16 17:53 , Processed in 0.218162 second(s), 118 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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