標準ライブラリ(仕様の一部)を使用せずに、さまざまな文字をchar*に連結するメソッドを実装する必要があります。だから、無strcatのかstrcopy。私は、文字列のどちらを使用することはできません。
これが私がやろうとしたことです(文字は自分で実装したStringListに格納されているため、「GetCell」メソッドと-> nextポインター):
char* IntlFinder::ConcatenateSrc ( int nSource, long beginPosition )
char* res = new char;
Cell* cell = ComList.GetCell(beginPosition);
for (long i = beginPosition; i <= (CountTab[nSource]); i++)
{
if (nSource == 0 || cell->elem.source == nSource)
{
res[i-beginPosition] = cell->elem.caractere;
}
cell = cell->next;
}
*res = '\0';
return res;
}
デバッグしているとき、これは特定の文字に到達するまでは見栄えがよく、その後は理由もなくバグが発生します(その時点で指しているセルは、有効なアドレスで正常に見えます)。
それについて何か考えはありますか?
-
編集:私は代わりにこれをやろうとしました:
for (long i = beginPosition; i <= (CountTab[nSource]-1); i++)
{
if (nSource == 0 || cell->elem.source == nSource)
{
*res = cell->elem.caractere;
++res = new char;
}
cell = cell->next;
}
これは、ポインタをインクリメントしてメモリを割り当てることになっているため(次の反復で別の値を追加できるようになります)、SIGSERVエラーは発生しなくなりました。しかし、このポインターまたはポインターの元の値を返し、最初の文字にポインティングすると、何も得られない(最初の場合)か、最初の文字だけが得られます(2番目の場合)。
最後に「\0」を追加することを忘れませんでしたが、それでも文字列にはなりません。