سؤال

حسنًا ، هذا يجمع بشكل جيد في مجلس التعاون الخليجي تحت Linux.

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 ++ تعويض المؤشر. التحذير المعتاد الذي لا يسمح به CPP على تعويضات المؤشر يجب أن يكون موضع نقاش ، حيث يتم بناء المشروع بأكمله تحت "C" Extern.

الآن ، هذه وظيفة واحدة فقط في الكثيرين ، وإيجاد الإجابة على هذا سيتيح لهم إصلاحهم جميعًا. أفضل حقًا عدم الاضطرار إلى إعادة كتابة مشروع المكتبة من الألف إلى الياء ، ولا أريد البناء تحت Mingw. يجب أن تكون هناك طريقة للقيام بذلك ، ولا أجدها في Google.

هل كانت مفيدة؟

المحلول

حسنًا ، لا يمكنك عمل ArithMetists المؤشر مع void*، فمن السخف أن هذا يجمع تحت GCC. محاولة memcpy(s, ((char*)offset)+2,*len);

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top