0

OK、これは Linux の GCC で問題なくコンパイルされます。

char * _v3_get_msg_string(void *offset, uint16_t *len) {/*{{{*/
    char *s;
    memcpy(len, offset, 2);
    *len = ntohs(*len);
    s = malloc(*len+1);
    memset(s, 0, *len+1);
    memcpy(s, offset+2, *len);
    s[*len] = '\0';
    *len+=2;
    return s;
}/*}}}*/

ただし、次の行のために、Windowsへの移植に問題があります...

memcpy(s, offset+2, *len);

無効なポインターであるため、VC++ はポインターをオフセットしたくありません。プロジェクト全体がextern "C"の下で構築されているため、CPPがポインターオフセットを許可しないという通常の警告は意味がありません。

現在、これは多くの機能の 1 つにすぎず、これに対する答えを見つけることで、すべてを修正することができます。ライブラリ プロジェクトを最初から書き直す必要はなく、MinGW でビルドしたくありません。これを行うには、私が行方不明で、Google で見つけられない方法が必要です。

4

1 に答える 1

2

ええと、void* でポインター演算を行うことはできません。これが GCC でコンパイルされるのはばかげています。試すmemcpy(s, ((char*)offset)+2,*len);

于 2010-09-17T06:37:20.617 に答える