私はここで純粋なCの問題があり、それはGTKとは関係ないと思うが、わからない。GTK C - gtk_list_store_setを供給するためのgint64へのポインタの値を取得
私はGtkEntryの内容を取り戻し、gcharを別の関数でgint64に変換してから、リストに追加したいというこの機能を持っています。あなたは、最初のprintf
は私に正しい値を与えますが、2番目の値は間違った値を与えます。
したがって、*c
に含まれているこの値をgtk_list_store_setに渡す方法がわかりません。
void on_button_add_clicked (GtkButton *button, app_widgets *app_wid) {
GtkTreeIter iter;
//get the entry content
gint64 *c = mult_by_100_char2int(gtk_entry_get_text(GTK_ENTRY(app_wid->ent_mont)));
printf("c=%li\n",*c);
gint64 cval = *c;
printf("cval=%li\n",cval);
//put in the liststore
GtkListStore *store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(app_wid->treeview)));
gtk_list_store_append(store, &iter); // Acquire an iterator
gtk_list_store_set(store, &iter,
AMOUNT_COLUMN, cval, //the column requires a gint64
-1);
}
//prototype of other function is:
gint64* mult_by_100_char2int (const gchar* number)
編集(追加機能 - 逆の順序で)は
gint64* mult_by_100_char2int (const gchar* number) {
const gchar* buf1 = mult_by_100(number);
gint64 buf2 = g_ascii_strtoll(buf1,NULL,10);
gint64 *buf3 = &buf2;
return buf3;
}
gchar* mult_by_100 (const gchar *number) {
int thesize = strlen(number);
gchar *entiers = substring(number,0,thesize-3);
gchar *centimes = substring(number,thesize-2,2);
gchar *result = g_strjoin("",entiers,centimes,NULL);
return result;
g_free(result);
}
gchar* substring(const gchar* s, int p, int l) {
char sub[128] = "";
char schar[128] = "";
gchar* result;
int i;
strcat(schar,s);
for(i=0;i<l;i++) {
sub[i] = schar[p+i];
//printf("i=%d - sub=%s\n",i,sub);
}
sub[i+1] = '\0';
result = g_strdup(sub);
return result;
g_free(result);
}
こんにちは、あなたはポインタが混乱している可能性があります。関数 'mult_by_100_char2int'の内容を追加できますか? –
さて、3つの入れ子関数を追加しました。 –
'mult_by_100_char2int'はgint64へのポインタを返す必要がありますか?それらのg_freeはリターンの後に完全に冗長であり、決して実行されません。 –