无法理解C源代码,它不能在GCC中编译,而是在Visual C++中编译

Exc*_*dev 4 c gcc visual-c++

在GCC中我收到以下错误:

aes.c:在函数'copy_block'中:
aes.c:278:错误:需要左值作为递增操作数
aes.c:278:错误:需要左值作为递增操作数

这是一段代码:

static void copy_block( void * d, void *s, uint_8t nn )
{
    while( nn-- )
        *((uint_8t*)d)++ = *((uint_8t*)s)++;
}
Run Code Online (Sandbox Code Playgroud)

我试图将其更改为可编译版本,但不幸的是,作为一名Java程序员,我不清楚这里到底发生了什么.

也许有人知道如何改变它在GCC中可编译的来源,或者有人知道这里发生了什么.对我来说,左手值的解除引用似乎很奇怪,但不知何故,它似​​乎在Visual C++中完美运行.

这是一个小型遗留程序,我必须将其移植到Linux机器上.

提前谢谢你的帮助.

sje*_*397 6

试试这个:

#include <string.h>
static void copy_block( void * d, void *s, uint_8t nn ) {
  memcpy(d, s, (size_t)nn);
}
Run Code Online (Sandbox Code Playgroud)

在那里做的是不好的.


det*_*zed 5

这应该这样做:

static void copy_block(void *d, void *s, uint_8t nn)
{
    uint_8t *ud = (uint_8t *)d;
    uint_8t *us = (uint_8t *)s;

    while (nn--)
    {
        *ud = *us;
        ++ud;
        ++us;
    }
}
Run Code Online (Sandbox Code Playgroud)

它也更具可读性.