文字列に関しては、私が理解していない(Cの初心者)基本的なことがあると思います。基本的に私はuthashを使用しており、文字列を直接送信するときに機能しますが、ループからは機能しません(配列からデータを取得します)。
次に例を示します。
enum { MAX_ID_LEN = 5 };
struct my_struct {
char id[MAX_ID_LEN]; /* key */
float price;
UT_hash_handle hh; /* makes this structure hashable */
};
struct my_struct *users = NULL;
void new_stock(char *user_id, float price) {
//printf("%c - %f \n", *user_id, price);
struct my_struct *s;
s = (struct my_struct*)malloc(sizeof(struct my_struct));
strcpy(s->id, user_id);
s->price = price;
HASH_ADD_STR( users, id, s ); /* id: name of key field */
}
int main() {
printf("starting.. \n");
new_stock("IBM", 10.2);
new_stock("goog", 2.2);
return 0;
}
それは機能しますが、配列から同じことを行おうとすると機能しません(コンパイル時にエラーは発生しません)。
char *name_all[] = {"ibm", "goog"};
int name_all_size =sizeof(name_all)/sizeof(char);
float price_all[] = {10.2, 2.2};
enum { MAX_ID_LEN = 5 };
struct my_struct {
char id[MAX_ID_LEN]; /* key */
float price;
UT_hash_handle hh; /* makes this structure hashable */
};
struct my_struct *users = NULL;
void insert_data() {
printf("inserting data \n");
int data_loc;
for (data_loc=0;data_loc<name_all_size;data_loc++) {
//printf("%s - %f \n", name_all[data_loc], price_all[data_loc]);
//new_stock(name_all[data_loc], price_all[data_loc]);
//new try
struct my_struct *s;
s = (struct my_struct*)malloc(sizeof(struct my_struct));
strcpy(s->id, name_all[data_loc]);
s->price = price_all[data_loc];
//printf("%s - %f \n", s->id, s->price); //ahh displays correctly but still fails
HASH_ADD_STR( users, id, s ); /* id: name of key field */
}
}
int main() {
insert_data();
return 0;
}
私はCを初めて使用するので、おそらくこれを間違って評価していますが、変数を渡す方法に関係していると思います。最初に試したときは関数に送信していましたnew_stock
が、最初の文字しか表示されていなかったため、変数を渡す問題を回避するために、関数のすべての内容を、すべてのデータを追加するために使用していた関数に移動しました。しかし、私はまだ同じ問題を抱えています。
私が間違っていることについて何か考えはありますか?
また、個人的な興味から、コードの問題を警告するツールはありますか?gccは役に立ちますが、警告が停止すると、トラブルシューティングの方法がわかりません。このような問題を以前にキャッチするのに役立つ何かがありますか(gccよりも冗長なもの)。それが可能かどうかはわかりませんが、聞きたかったのです。