1

私はこの特定の問題について頭を悩ませてきたので、アドバイスが欲しい. 私は次の構造体を持っています:

struct MqlStr // MQL String Array
{
int               len;
char              *string;
};

これは、外部アプリケーションからポインターとして関数に渡されます。

MT4_EXPFUNC double __stdcall CheckExecutionRequests(MqlStr* RequestInfo)

関数内で、MqlStr 配列のさまざまな要素に割り当てる必要がある多数の文字列値を生成しています。以下はうまくいきます:

RequestInfo[1].string = "1";
RequestInfo[2].string = "2";

しかし、strcpy を使用して生成された文字列値を配列に取得すると、コピーした値で配列全体が上書きされます。例えば:

string field1 = value.substr(Demark + 1, Demark2 - Demark - 1);
strncpy(RequestInfo[1].string, field1.c_str(), field1.size());

string field2 = value.substr(Demark + 1, Demark2 - Demark - 1);
strncpy(RequestInfo[2].string, field2.c_str(), field2.size());

field1 = 1 かつ field2 = 2 の場合、RequestInfo[] 配列全体は 2 になります (最後にコピーされた値)。

誰かが私を正しい方向に向けることができますか?

4

3 に答える 3

0

RequestInfo 要素の .string ポインターに十分なスペースを割り当てましたか? strncpy はスペースを割り当てていません。そのためには strdup を使用してください。

于 2013-07-16T09:01:44.797 に答える
0
RequestInfo[1] = "1";

あなたが思うように行動していません。どちらかです

RequestInfo[1].string = "1";

少なくとも 2 つの要素を含むオブジェクトRequestInfoのベクトルである場合、またはMqlStr

RequestInfo->string = "1";

ifRequestInfoは単一のMqlStrオブジェクトへのポインタです。

于 2013-07-16T08:42:32.480 に答える