2016-04-13 18 views
-3

私はすべてを正しくやっていると思いますが、文字列は割り当てられている文字で埋められていません。私がテストで知っているのは、randomは正しい文字、qは正しいint、s [i] .nameは文字列です。私は.at(q)と[q]を使ってみましたが、何も動いていません。それがなら 中止(ダンプコア)at()は機能していません

for (int i = 0; i < num; i++) { 
    int q = 0; 
    char random = 50; 
    for (; random != 32;) { 
     file.get(random); 
     s[i].name.at(q) = random; 
     q++; 
    } 
    q = 0; 
} 
cout << s[0].name; 
+1

rvalに 'char'を割り当てようとしているように見えます(rvalは存在しません)。 –

+1

あなたのロジックによれば、 'q'は' s [i] .name'が文字を持つよりも大きな値を持つことができます。 –

答えて

1

でのbasic_string :::

する 'のstd :: out_of_range' 何()のインスタンスを投げた後に呼び出さTERMINATE:

この

は私のエラーですすべてのコードは、名前がどこにでもメモリを割り当てていないので、クラッシュしています。 atを呼び出すには、少なくともそれが動作するためにすでに割り当てられている多くの要素が必要です。代わりにpush_backを呼び出すと、文字列の後ろに要素が追加され、必要に応じて要素が展開されます。

また、forの最後の行は余分です。次の行が破棄され、次のループで新しいqが割り当てられるため、qを0に設定する点はありません。 push_backでは、qを使ってインデックスを追跡することは完全に冗長になります。 最後に、forは不必要に複雑にしていますが、この場合は代わりに使用してください。

+0

ありがとう、簡単な間違いを見落としました。 – Dent

0

あなたは私たちに完全なコードを与えていないが、私はあなたの意図を理解していれば、あなたはこれでそれのような何かを得ることができる必要がありますので、これは、困難である:

for (int i = 0; i < num; i++) { 
    char random = 50; 
    s[i].name = ""; 
    for (; random != 32;) { 
     file.get(random); 
     s[i].name += random; 
    } 
} 
cout << s[0].name; 

あなたの文字列が短すぎます、at()は例外をスローします。私のような連結を使用すると、任意に大きな文字列を処理する必要があります。

関連する問題