|
这是我写的一个测试的程序,目的是想把从数据库查询得到的信息用GTK的图形显示出来:
- #include <stdio.h>
- #include <gtk/gtk.h>
- #include <mysql.h>
- /* Define global variables */
- MYSQL *mysql;
- MYSQL_RES *query_result;
- MYSQL_ROW row;
- gchar *username = "root";
- gchar *password = "123456";
- gchar *database = "station_system";
- gchar *hostname = "localhost";
- /* End the global variables Define */
- gint
- query_mysql (gchar *query)
- {
- gint success = 0;
- if (mysql_query (mysql, query) == 0)
- {
- query_result = mysql_store_result (mysql);
- success = 1;
- }
- return success;
- }
-
- void
- window_quit()
- {
- printf ("Window quit!\n");
- gtk_main_quit();
- }
- gint
- main (gint argc, gchar *argv[])
- {
- gtk_set_locale ();
- gtk_init (&argc, &argv);
- GtkWidget *window;
- GtkWidget *button;
- GtkWidget *box;
- GtkWidget *label;
- gchar *query;
- if (mysql_init (mysql) == NULL) return 1;
- mysql = mysql_real_connect (mysql, hostname, username, password, database, 0, 0, 0);
- if (mysql == NULL) return 1;
- sprintf (query, "SELECT * FROM station WHERE province="广东省"");
- if (query_mysql (query) == 0) return 1;
- row = mysql_fetch_row (query_result);
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- label = gtk_label_new (row[0]);
- button = gtk_button_new_with_label ("退出");
- box = gtk_vbox_new (TRUE, 5);
- gtk_window_set_title (GTK_WINDOW (window), "数据库窗口");
- gtk_window_set_default_size (GTK_WINDOW (window), 640, 480);
- //gtk_window_set_border_width (GTK_WINDOW (window), 10);
- gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (window_quit), NULL);
- gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0);
- gtk_box_pack_start (GTK_BOX (box), button, FALSE, FALSE, 0);
- gtk_container_add (GTK_CONTAINER (window), box);
- gtk_widget_show (label);
- gtk_widget_show (button);
- gtk_widget_show (box);
- gtk_widget_show (window);
- gtk_main ();
- mysql_free_result (query_result);
- mysql_close (mysql);
- return 0;
- }
复制代码
我用下面的参数编译成功:
gcc -o new new.c `gtk-config --cflags --libs` -I/usr/local/mysql/include/mysql -L/usr/local/mysql/lib/mysql -lmysqlclient -lz
但执行程序时出现“段错误”,然后程序退出,关键是哪里出错了呢?
我是直接取查询到的MYSQL_ROW类型变量row作为label = gtk_label_new (row[0]);传递给GTK函数的,这样是不是不行?请兄弟们指教,谢谢 |
|