![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
C++でcsvファイルから文字列を取得するというものを作っているのですが、うまく取り出すことができません。ファイルはオープンできて、文字列にも分けられているのだとは思うのですが、どこのデータを表示させても"1aa"としか表示されません。なにも格納されていない所は"1aa"とは表示されず空白ですが。
以下に取り出す際使用しているコードを記載するので、うまい具合にいくアドバイスがありましたらお願いします。
↓で格納させる場所を作っています。
typedef struct
{
char* Input;
char* Output;
char* AddName;
char* Path;
char* LED;
int VS;
char* Title;
char* Copy;
} csvdata_t;
csvdata_t csvdata[100]として別の場所で宣言してます
↓この関数で格納させています
void loadData(){
FILE *fp;
fp = fopen(csvTitle,"r");//ここでのファイルパスは通っています
int n,num,i;
int input[1024];
char inputc[1024];
for(i = 0; i < 1; i++)//最初の1行読み飛ばす
while(fgetc(fp) != '\n');
n = 0;
num = 0;
while(1){
for(i = 0;i < 64; i++){
inputc[i] = input[i];// = fgetc(fp);//1文字取得する
input[i] = fgetc(fp);
if(inputc[i] == '/'){//スラッシュがあれば
while(fgetc(fp) != '\n');//改行までループ
i = -1;//カウンタを最初に戻して
continue;
}
if(input[i] == ',' || input[i] == '\n'){//カンマか改行なら
inputc[i] = '\0';//そこまでを文字列とし
break;
}
if(input[i] == EOF){//ファイルの終わりなら
goto EXFILE;//終了
}
}
switch(num){
case 0: csvdata[n].Input = inputc;break;
case 1: csvdata[n].Output = inputc;break;
case 2: csvdata[n].AddName = inputc;break;
case 3: csvdata[n].Path = inputc;break;
case 4: csvdata[n].LED = inputc;break;
case 5: csvdata[n].VS = atoi(inputc);break;
case 6: csvdata[n].Title = inputc;break;
case 7: csvdata[n].Copy = inputc;break;
case 8: break;
}
num++;
if(num == 9){//9まできたら
num = 0;//0に戻す
n++;//次の行へ
}
}
EXFILE:
fclose(fp);
}
No.1ベストアンサー
- 回答日時:
>void loadData(){
> FILE *fp;
> fp = fopen(csvTitle,"r");//ここでのファイルパスは通っています
> int n,num,i;
> int input[1024];
>char inputc[1024];
inputc[]は「ローカル変数」で間違いないですかね?
>switch(num){
>case 0: csvdata[n].Input = inputc;break;
>case 1: csvdata[n].Output = inputc;break;
>case 2: csvdata[n].AddName = inputc;break;
>case 3: csvdata[n].Path = inputc;break;
>case 4: csvdata[n].LED = inputc;break;
>case 5: csvdata[n].VS = atoi(inputc);break;
>case 6: csvdata[n].Title = inputc;break;
>case 7: csvdata[n].Copy = inputc;break;
>case 8: break;
>}
で、ローカル変数へのポインタを代入しているようですが…
さて「ローカル変数」の寿命(有効期間)はいつまでだったか学習しましたか?
# csvdata[n].VSだけポインタではなく数値の代入なので正しく動作するかと。
>どこのデータを表示させても"1aa"としか表示されません。
ただの偶然です。
不正終了してもまったく不思議のないコードになってます。
で、どのデータも同じアドレス指していますから、「どこのデータ」だろうが同じ動作します。
# ポインタに入っているアドレス確認してみましょうね。
>うまい具合にいくアドバイスがありましたらお願いします。
個別に、動的にメモリ確保して保持して下さい。
もちろん、不要になったら破棄して下さい。
malloc()/free()とかですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- JavaScript セレクトボックスを2つ選択してメッセージなどを表示するには。~運賃検索プログラムを完成させたい~ 1 2022/07/22 11:10
- JavaScript セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- JavaScript jsで、switch文で書かれた分をif文にできませんか。 1 2022/07/28 15:10
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語の課題です
-
c言語でのfscanfについて
-
テキストファイル内に対して, ...
-
fgets( ) の返り値は何?
-
C言語 連番データの読み込み
-
数値のみ抽出(C言語)
-
ファイルの特定行の抽出
-
フーリエ変換のC言語プログラム...
-
ファイルが読み込めない・・・
-
辞書順にソートしたいのですが...
-
音声データを出力するCプログラ...
-
InternetReadFileを使ったファ...
-
乱数とファイルの入出力の質問...
-
3桁ずつ順に読んでいきたい
-
エラーがわかりません、、
-
CGIコンパイルエラーについ...
-
VisualStudioでのファイルの入...
-
fscanfでループしてしまう。
-
日本語ファイル名のFTPについて
-
csvファイルのデータを構造体に
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c言語でのfscanfについて
-
fopenでファイル名に、変数を使...
-
複数ファイルの同時読み込みの...
-
C言語でセグメンテーションエ...
-
C言語でファイル読み書きを早く...
-
ファイル出力で改行を入れたい!
-
エラーがわかりません、、
-
テキストファイル内に対して, ...
-
構造体のメンバにファイルポイ...
-
C言語にてXMLファイルから任意...
-
ガンマ変換 C言語でプログラ...
-
日本語ファイル名のFTPについて
-
【C言語】ファイルを読み込んで...
-
fscanfでループしてしまう。
-
fgets( ) の返り値は何?
-
CRC32の計算方法
-
VisualStudioでのファイルの入...
-
ファイルに行番号を追加
-
ファイルへの書込み処理が異常...
-
ファイルが読み込めない・・・
おすすめ情報