簡體   English   中英

android ndk開發問題:memcpy函數的'無效參數'錯誤

[英]android ndk development issue: 'Invalid arguments' error for memcpy function

我在android項目中使用了c ++代碼,所以我使用了NDK工具。 IDE是eclipse。 編譯項目時,我得到了memcpy函數的錯誤:

Invalid arguments '
Candidates are:
void * memcpy(void *, const void *, ?)
'

它也適用於mallocstrftime

我是在Windows系統下開發的。

為什么?

這是我的代碼的一部分:

#include <vector>
#include <iostream>
#include <fstream>
#include <iterator>
#include "dirent.h"

#include <jni.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <android/log.h>

string getCurrentDate() {
    time_t rawtime;
    struct tm * timeinfo;
    char buffer[80];

    time(&rawtime);
    timeinfo = localtime(&rawtime);

    // #######################error part
    strftime(buffer, 80, "%Y-%m-%d_%H-%M-%S", timeinfo);

    string timeStr(buffer);

    return timeStr;
}

std::string jstring2str(JNIEnv* env, jstring jstr) {
    char* rtn = NULL;
    jclass clsstring = env->FindClass("java/lang/String");
    jstring strencode = env->NewStringUTF("GB2312");
    jmethodID mid = env->GetMethodID(clsstring, "getBytes",
            "(Ljava/lang/String;)[B");
    jbyteArray barr = (jbyteArray) env->CallObjectMethod(jstr, mid, strencode);
    jsize alen = env->GetArrayLength(barr);
    jbyte* ba = env->GetByteArrayElements(barr, JNI_FALSE);
    if (alen > 0) {
        // ####################error for malloc
        rtn = (char*) malloc(alen + 1);
        // ####################error for memcpy
        memcpy(rtn, ba, alen);
        rtn[alen] = 0;
    }
    env->ReleaseByteArrayElements(barr, ba, 0);
    std::string stemp(rtn);
    free(rtn);
    return stemp;
}
...

我已使用以下方法解決此問題:

  1. 轉到設置:屬性 - > C / C ++常規 - >路徑和符號
  2. 選擇“包含”選項卡並選擇“GNU C ++”
  3. 添加新的包含目錄: ${NDKROOT}\\toolchains\\arm-linux-androideabi-4.8\\prebuilt\\windows-x86_64\\lib\\gcc\\arm-linux-androideabi\\4.8\\include ,其中${NDKROOT}是我的android的環境-ndk根目錄

我希望它可以幫助其他人遇到同樣的問題。 感謝您的所有幫助。

我在代碼中看不到問題。 所以我認為這是我們在使用Eclipse進行NDK開發時通常面臨的索引問題。

請參閱以下鏈接以了解類似問題: https//code.google.com/p/android/issues/detail?id = 33788

索引問題可以使用此處指定的過程解決:

將C程序遷移到Android NDK

簡介:使用Android GCC工具鏈,但更改實際工具和修改發現選項,以使包含路徑和符號正確。

默認情況下,C ++編譯器比C編譯器嚴格。 嘗試在C代碼或C ++樣式的代碼中添加類型轉換 -

memcpy((void *)rtn, (const void *)ba, (int)alen);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM