مشكلة النقل: مؤشر مع إزاحة في VC ++
-
03-10-2019 - |
سؤال
حسنًا ، هذا يجمع بشكل جيد في مجلس التعاون الخليجي تحت 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);
لا تنتمي إلى StackOverflow