2017-10-17 7 views
0

行間の区切り文字が '\ n'であるところの.csvファイルを解析する必要がありますが、任意の値に '\ n' 。 私はこの関数を書いています。これは実際にmainに置いたときに機能しますが、mainから切り離されても変数は変更されません。ここで 別の関数でgetline()を使用する

void getWholeValue(ifstream &ip, string l) { 
getline(ip, l, ','); 
if (l[0] == '"') { 
    string s; 
    getline(ip, s, '"'); 
    l = (l + s); 
}} 

は、私は関数を呼び出す方法の例です:

struct Line {string customer;}; 
    int main(){ 
    Line *l = new Line; 
    while (ip.good()) 
      {getWholeValue(ip, l->customer); 
      } 
    delete l; 
} 

だから私はこのようにgetlineのを呼び出す際に、正確に何が起こりますか?ポインタに関する問題はありますか?多分、私が望むものを得るための正確な方法がありますか? ご協力いただきありがとうございます。

+1

と[STD :: getlineの()](http://en.cppreference.com/w/cpp/stringを見て:単純にあなたのgetWholeValue(ifstream &ip, string l)

ヘッダーを変更/ basic_string/getline)。抽出された内容は 'std :: string&'である第2引数を介して返されます。結果が 'getWholeValue()'の外側に現れるようにしたい場合、 'string l'も' string&l'を参照することができます。 – Scheff

+0

Btw。私は 'Line * l = new Line;'と 'delete l;'のモチベーションは見ません。それを 'Line l;'に変更し、 'delete l;'を削除した場合も同様に動作します。この変更のために、 'l'はヒープ上ではなくスタック上に格納され、私は不利益としてカウントしません。 (もちろん、 'l-> customer'を' l.customer'に変更しなければなりません) – Scheff

+0

'getWholeValue'が文字列を返さないのはなぜですか? APIをより洗練されたIMHOにします。 'std :: string getWholeValue(ifstream&ip)' –

答えて

0

パラメータlの値を正しく変更するには、変数が参照によって渡されるようにパラメータをstd::string &にする必要があります。したがって、渡された元の変数がスコープ内で作成された一時変数関数の、デバッガを使用してください getWholeValue(ifstream &ip, string &l)

関連する問題