3

Android プロジェクトには C++ コードを使用したため、NDK ツールを使用します。IDE は日食です。プロジェクトをコンパイルすると、memcpy関数のエラーが発生しました:

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

mallocにも起こりstrftimeます。

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;
}
...
4

3 に答える 3

2

コードに問題がありません。したがって、Eclipse を使用して NDK 開発を行う際に通常直面するのは、インデックス作成の問題だと思います。

同様の問題については、以下のリンクを参照してください: https://code.google.com/p/android/issues/detail?id=33788

インデックス作成の問題は、次の手順で解決できます。

C プログラムを Android NDK に移行する

概要: Android GCC ツールチェーンを使用しますが、インクルード パスとシンボルが正しくなるように実際のツールを変更し、検出オプションを変更します。

于 2013-10-23T06:46:28.007 に答える
0

デフォルトでは、C++ コンパイラは C コンパイラよりも厳密です。C スタイルまたは C++ スタイルのいずれかで、コードに型キャストを追加してみてください -

memcpy((void *)rtn, (const void *)ba, (int)alen);
于 2013-10-23T08:56:27.330 に答える