jy_zhsq 发表于 2024-8-20 17:09:53

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

#include "stc32g.h"               
#include "intrins.h"
#include <string.h>
unsigned char buf1;
unsigned char buf2;
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编译器有问题?

小白爱上51 发表于 2024-8-20 17:38:55

C语言的memcpy可以用吗

DebugLab 发表于 2024-8-20 17:43:46

小白爱上51 发表于 2024-8-20 17:38
C语言的memcpy可以用吗

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

_奶咖君_ 发表于 2024-8-21 09:06:01

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

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

_奶咖君_ 发表于 2024-8-21 09:07:26

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

你的意思是,,即使参数中有长度,,在长度内如果遇到0 会提前返回?

DebugLab 发表于 2024-8-21 09:19:39

_奶咖君_ 发表于 2024-8-21 09:06
遇0返回的不是strcpy?memcpy我记得有输入长度的啊

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

DebugLab 发表于 2024-8-21 09:28:51

_奶咖君_ 发表于 2024-8-21 09:06
遇0返回的不是strcpy?memcpy我记得有输入长度的啊


记错了,遇0返回是strncpy

jy_zhsq 发表于 2024-8-21 11:10:37

你们没有明白这问题的意思。这个问题在于函数内len--这条语句执行无效

jy_zhsq 发表于 2024-8-21 11:14:51

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

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

zxcv1973 发表于 2024-8-21 11:44:20

用的哪种CPU,STC32G12K128没问题
页: [1] 2 3
查看完整版本: C251编译器问题:函数第3参数不能在函数内计算