0

簡単そうに聞こえますが、バグがあり、何が原因かわかりません。

nopunccount = 0;
char *ra = new char[sizeof(npa)];
while (nopunccount <= strlen(npa)) {
    ra[nopunccount] = npa[strlen(npa) - nopunccount]; 
    nopunccount++;
}

raは値を取得することはなく、npaにnopunccount範囲内で提供するchar値があることを確認しました。

どんな助けでも大歓迎です//:)

4

2 に答える 2

4

nopunccount0として開始するため、ループの最初の反復では、割り当てられた文字ra[0]はですnpa[strlen(npa)]。これは、'\0'その文字列の終了です。したがって、結果の文字列はraaで始まり'\0'、通常の文字列関数によってその最初のバイトで終了していると見なされます。

于 2010-03-02T09:48:34.873 に答える
2

の宣言はnpaどのように見えますか?ポインタの場合はsizeof(npa)、割り当てられたサイズではなく、ポインタのサイズになります。これらがゼロで終了する文字列(「C文字列」とも呼ばれます)の場合はstrlen、ではなく、を使用しますsizeof。これらが文字列でない場合は、別の変数に割り当てた量を追跡する必要があります。

私はこのコードについて他にもいくつか批評をしていますが、おそらくあなたの問題とは関係ありません。

while (nopunccount <= strlen(npa)) {

strlenO(n)操作です。npaこのコードは、ループの反復ごとに文字列をトラバースします。長さを計算するのは1回だけにするのが最善です。

   ra[nopunccount] = npa[strlen(npa) - nopunccount];

ここでも同じ問題があります。

于 2010-03-02T09:46:26.623 に答える