ページ 1 / 1
ライブラリで構造体に登録したデータがフフフフフになる。
Posted: 2013年6月20日(木) 11:32
by 新人
ライブラリで構造体に登録したデータをメインプログラムでprintf(salsdata[0].car_code);するとフフフフフ....... 文字化け になる。どなたか原因が分かる方ご教授お願いします。
ライブラリ
int Set_Struct_SalsData(void) {
char str[CSV_RECODE_SIZE_MAX];
FILE *fp;
SALSDATA salsdata[1024];
int DataCount = 0;
fp = fopen("sale0904.csv","r");
while(fgets(str, CSV_RECODE_SIZE_MAX, fp)){
sscanf(str, "%[^,],%[^,],%[^,],%x,%s",
salsdata[DataCount].branche_code,
salsdata[DataCount].customer_name,
salsdata[DataCount].car_code,
&salsdata[DataCount].option,
salsdata[DataCount].date);
DataCount++;
}
fclose(fp);
return 0;
}
Re: ライブラリで構造体に登録したデータがフフフフフになる。
Posted: 2013年6月20日(木) 12:21
by non
ローカル変数を関数の外から参照しようとしているからではないでしょうか。
Re: ライブラリで構造体に登録したデータがフフフフフになる。
Posted: 2013年6月20日(木) 13:03
by box
どうせソースコードを提示するなら、回答しようとする側で
状況が再現できるよう、main関数などを含めた
ビルドできるコード全体を提示してくださると助かります。
Re: ライブラリで構造体に登録したデータがフフフフフになる。
Posted: 2013年6月20日(木) 13:12
by 新人
すみませんでした。メインプログラムです。
よろしくお願いします。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "csv_lib.h"
#include "csv_struct.h"
int Set_Struct_SalsData(void);
int main(void){
SALSDATA salsdata[1024];
Set_Struct_SalsData();
printf(salsdata[0].car_code);
return 0;
}
Re: ライブラリで構造体に登録したデータがフフフフフになる。
Posted: 2013年6月20日(木) 13:21
by box
nonさんの回答がビンゴです。
コード:
int Set_Struct_SalsData(void) {
SALSDATA salsdata[1024];
コード:
int main(void){
SALSDATA salsdata[1024];
main関数のsalsdata[]とSet_Struct_SalsData関数のsalsdata[]は、
ともにその関数の中でだけ有効な変数です。
両者の間には何の関連もありません。たとえ名前が同じであるとしても。
両者を結びつけたければ、Set_Struct_SalsData関数の引数として
salsdata[]を渡すか、あるいは、salsdata[]をグローバル変数とする必要があります。
前者を推奨します。
ところで、
コード:
printf(salsdata[0].car_code);
この書き方は正しいでしょうか。書式文字列は本当に不要ですか?
Re: ライブラリで構造体に登録したデータがフフフフフになる。
Posted: 2013年6月20日(木) 13:45
by 新人
boxさん、nonさん ありがとうございます。正しく表示されました。
salsdata[]をグローバル変数とする方はわかったのですがSet_Struct_SalsData関数の引数としてsalsdata[]を渡す方法というのがわかりません。どう書けばよろしいのでしょうか?
Re: ライブラリで構造体に登録したデータがフフフフフになる。
Posted: 2013年6月20日(木) 13:57
by box
新人 さんが書きました:
Set_Struct_SalsData関数の引数としてsalsdata[]を渡す方法というのがわかりません。どう書けばよろしいのでしょうか?
C言語に関する参考書を読んだりWebサイトを閲覧したりすれば、
配列を関数の引数とする方法が必ず載っているはずです。
研究してみてください。
Re: ライブラリで構造体に登録したデータがフフフフフになる。
Posted: 2013年6月20日(木) 14:55
by non
関数内で静的や動的にメモリを用意して、ポインタを返すという方法もあります。
Re: ライブラリで構造体に登録したデータがフフフフフになる。
Posted: 2013年6月20日(木) 15:05
by softya(ソフト屋)
新人さんとTAXIESさんはおなじ方でしょうか?
フォーラムルールで名前の統一をお願いしております。
http://dixq.net/board/board.html
Re: ライブラリで構造体に登録したデータがフフフフフになる。
Posted: 2013年6月20日(木) 15:11
by PSYCO
すみませんでした。ご迷惑おかけしました。
Re: ライブラリで構造体に登録したデータがフフフフフになる。
Posted: 2013年6月20日(木) 15:12
by non
PSYCO さんって誰よ。別の人が謝ってる?
Re: ライブラリで構造体に登録したデータがフフフフフになる。
Posted: 2013年6月20日(木) 15:22
by PSYCO
nonさん
新人と同じ者です。PSYCOでユーザ登録させていただきました。
混乱させてしまい申し訳ありません。