나는 여기에 순수한 C 문제가 있다고 생각한다. GTK와는 아무런 관련이 없다.GTK C - gtk_list_store_set을 먹일 gint64 포인터 값을 얻는다.
나는 GtkEntry의 내용을 retreiving하고 gchar을 다른 함수로 gint64로 변환 한 다음 목록에 추가하려고합니다. 너는 첫 번째 printf
이 나에게 올바른 값을 주지만 두 번째 값은 잘못된 값을 준다.
따라서 *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의 반환 후 완전히 중복, 그들은 결코 실행되지 않습니다 ... –