2016-12-31 4 views
1

文字定数配列に文字列値を代入しているときに問題が発生しています。文字列の特定の位置に文字列値を代入するたびに。文字列変数で新しい値を取得した後、配列内のその位置の値は空の文字列に初期化されます。私はそれを手に入れようと努力しましたが、無駄でした。以下は私が使用しているコードです:文字定数空の文字列に初期化された文字列変数がC++で新しい値を取得する

 const char *array[40]; 
     string line=""; 
     ifstream myfile("text.txt"); 
     if (myfile) 
      { 
      int in=0; 
      while (getline(myfile, line)) 
      { 

       array[in]=line.data(); 
        in++; 
      } 
      myfile.close(); 
      } 
     else return; 

ここで、配列変数はすべての空の文字列値を持っています。どうすればいいのか教えてください。

+3

string::data()のドキュメントを参照してください: – juanchopanza

+3

あなたはおそらく 'のstd ::ベクトル配列たい;'(ヒントあなただけの1つの文字列オブジェクトを持っています。)。 – Jarod42

+2

ファイルに40行を超えるファイルが含まれていると問題になります。 – PaulMcKenzie

答えて

0

stringオブジェクトlineの内部データバッファにアクセスし、array[in]を指します。次の行を読むとき、このバッファは上書きされるか、または先に書き込まれたarray[in]が新しい内容で上書きされたメモリを指し示すか、まったく無効であるように、異なるメモリ位置を指すことがあります。

あなたは、const char*[...]配列を使用する最初のバッファをコピーする場合:line.data()はあなたの配列を与えること、

array[in]= strdup(line.c_str()); 

注さらにけど最後に終端を0x0の保証なし。何に配列ポイントでポインタを考えてみてcppreference.com

+0

Stephanに感謝します。 –

+0

ようこそ。これがあなたの質問に答えるならば、その質問に合格とマークすることを忘れないでください。ありがとう! –

+0

私は答えを受け入れるようにしましたが、システムは私にそれを許可しません、評判が15未満であるため –

関連する問題