ライブラリで構造体に登録したデータがフフフフフになる。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
新人

ライブラリで構造体に登録したデータがフフフフフになる。

#1

投稿記事 by 新人 » 12年前

ライブラリで構造体に登録したデータをメインプログラムで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;
}

non
記事: 1097
登録日時: 15年前

Re: ライブラリで構造体に登録したデータがフフフフフになる。

#2

投稿記事 by non » 12年前

ローカル変数を関数の外から参照しようとしているからではないでしょうか。
non

box
記事: 2002
登録日時: 15年前

Re: ライブラリで構造体に登録したデータがフフフフフになる。

#3

投稿記事 by box » 12年前

どうせソースコードを提示するなら、回答しようとする側で
状況が再現できるよう、main関数などを含めた
ビルドできるコード全体を提示してくださると助かります。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

新人

Re: ライブラリで構造体に登録したデータがフフフフフになる。

#4

投稿記事 by 新人 » 12年前

すみませんでした。メインプログラムです。
よろしくお願いします。


#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;
}

box
記事: 2002
登録日時: 15年前

Re: ライブラリで構造体に登録したデータがフフフフフになる。

#5

投稿記事 by box » 12年前

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: ライブラリで構造体に登録したデータがフフフフフになる。

#6

投稿記事 by 新人 » 12年前

boxさん、nonさん ありがとうございます。正しく表示されました。
salsdata[]をグローバル変数とする方はわかったのですがSet_Struct_SalsData関数の引数としてsalsdata[]を渡す方法というのがわかりません。どう書けばよろしいのでしょうか?

box
記事: 2002
登録日時: 15年前

Re: ライブラリで構造体に登録したデータがフフフフフになる。

#7

投稿記事 by box » 12年前

新人 さんが書きました: Set_Struct_SalsData関数の引数としてsalsdata[]を渡す方法というのがわかりません。どう書けばよろしいのでしょうか?
C言語に関する参考書を読んだりWebサイトを閲覧したりすれば、
配列を関数の引数とする方法が必ず載っているはずです。
研究してみてください。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

non
記事: 1097
登録日時: 15年前

Re: ライブラリで構造体に登録したデータがフフフフフになる。

#8

投稿記事 by non » 12年前

関数内で静的や動的にメモリを用意して、ポインタを返すという方法もあります。
non

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: ライブラリで構造体に登録したデータがフフフフフになる。

#9

投稿記事 by softya(ソフト屋) » 12年前

新人さんとTAXIESさんはおなじ方でしょうか?
フォーラムルールで名前の統一をお願いしております。
http://dixq.net/board/board.html
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

PSYCO
記事: 10
登録日時: 12年前

Re: ライブラリで構造体に登録したデータがフフフフフになる。

#10

投稿記事 by PSYCO » 12年前

すみませんでした。ご迷惑おかけしました。

non
記事: 1097
登録日時: 15年前

Re: ライブラリで構造体に登録したデータがフフフフフになる。

#11

投稿記事 by non » 12年前

PSYCO さんって誰よ。別の人が謝ってる?
non

PSYCO
記事: 10
登録日時: 12年前

Re: ライブラリで構造体に登録したデータがフフフフフになる。

#12

投稿記事 by PSYCO » 12年前

nonさん
新人と同じ者です。PSYCOでユーザ登録させていただきました。
混乱させてしまい申し訳ありません。

閉鎖

“C言語何でも質問掲示板” へ戻る