
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
GlobalAlloc生成メモリの開放で...
-
ファイルの特定行の抽出
-
C言語でファイル読み書きを早く...
-
01番の二次元配列でこの実行結...
-
c言語でのfscanfについて
-
最早開始時間と最遅完了時刻を...
-
【C++】関数ポインタの使い方
-
既定のコンストラクタがありま...
-
Aの値からBの値を除するとは??
-
「Aに対するBの割合」と「Aに対...
-
信頼区間の1.96や1.65ってどこ...
-
a^2の√=a が成り立たない場合
-
VB6.0での小数点の扱いについて
-
配列をnビットシフトする
-
数学 一次関数 関数 y=-3/4x+k(...
-
c languageで 簡単な質問があ...
-
C言語 エラーの原因がわからな...
-
#define _CRT_SECURE_NO_WARNIN...
-
プログラムでの数字につく”f”の...
-
C言語で複数列のデータを1列の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複数ファイルの同時読み込みの...
-
C言語の課題です
-
ファイル出力で改行を入れたい!
-
fgets( ) の返り値は何?
-
C言語でファイル読み書きを早く...
-
fopenでファイル名に、変数を使...
-
ファイルに行番号を追加
-
テキストファイル内に対して, ...
-
ファイルへの書込み処理が異常...
-
C言語についてアドバイスをくだ...
-
同時にファイル読み込み 書き込み
-
初心者のc言語
-
大量の入力ファイルを扱うとき...
-
【C言語について】ファイル名の...
-
C言語 共用体の構造体の引数設定
-
C言語でのCSVソートとデータ抽...
-
エラーがわかりません、、
-
プログラムの内で、何か画面表...
-
「コマンドライン引数チェック...
-
プログラミングのデータの読み込み
おすすめ情報