Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何从gtk_条目设置变量值?_C_Gtk - Fatal编程技术网

C 如何从gtk_条目设置变量值?

C 如何从gtk_条目设置变量值?,c,gtk,C,Gtk,我想从条目中设置var pid,但收到以下警告: gtk.c:7:6:警告:赋值从指针生成整数而不进行强制转换[默认情况下启用] 如何使var pid==条目?这是非常重要的,因为这个程序将向我们要输入的id(pid)的进程发送信号 #include <gtk/gtk.h> #include <stdlib.h> pid_t pid; void sendSighup(GtkWidget *widget,GtkWidget *entry, gpointer label)

我想从条目中设置var pid,但收到以下警告:

gtk.c:7:6:警告:赋值从指针生成整数而不进行强制转换[默认情况下启用]

如何使var pid==条目?这是非常重要的,因为这个程序将向我们要输入的id(pid)的进程发送信号

#include <gtk/gtk.h>
#include <stdlib.h>

pid_t pid;
void sendSighup(GtkWidget *widget,GtkWidget *entry, gpointer label) {

pid = gtk_entry_get_text(GTK_ENTRY(entry));
kill(pid,SIGHUP);
}
void sendSigint(GtkWidget *widget, gpointer label) {


        kill(pid,SIGINT);
}
void sendSigkill(GtkWidget *widget, gpointer label) {

    kill(pid,SIGKILL);
}
void sendSigterm(GtkWidget *widget, gpointer label) {

    kill(pid,SIGTERM);
}
void sendSigstop(GtkWidget *widget, gpointer label) {

    kill(pid,SIGSTOP);
}

accept_clicked (GtkButton *button, GObject *context_object)
{
    GtkLabel *accept_lable1 = g_object_get_data (context_object, "label1");
    GtkEntry *accept_entry = g_object_get_data (context_object, "entry");

    const char *entry_in = gtk_entry_get_text (accept_entry);
    gtk_label_set_text (accept_lable1, entry_in);
}



int main( int argc, char *argv[])
{
GtkWidget *window;
GtkWidget *frame;
GtkWidget *table;

GtkWidget *button1;
GtkWidget *button2;
GtkWidget *button3;
GtkWidget *button4;
GtkWidget *button5;
GtkWidget *quit;
GtkWidget *set;
GtkWidget *vseparator;
GtkWidget *entry;
GtkWidget *label;
GtkWidget *label1;
GtkWidget *label2;

gtk_init(&argc, &argv);

window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "Send Signal");
gtk_window_set_default_size(GTK_WINDOW(window), 300, 250);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);

frame = gtk_fixed_new();
gtk_container_add(GTK_CONTAINER(window), frame);

button1 = gtk_button_new_with_label("Sighup");
gtk_fixed_put(GTK_FIXED(frame), button1, 8, 15);
gtk_widget_set_size_request(button1, 80, 35);

button2 = gtk_button_new_with_label("Sigint");
gtk_fixed_put(GTK_FIXED(frame), button2, 8, 60);
gtk_widget_set_size_request(button2, 80, 35);

button3 = gtk_button_new_with_label("Sigkill");
gtk_fixed_put(GTK_FIXED(frame), button3, 8, 105);
gtk_widget_set_size_request(button3, 80, 35);

button4 = gtk_button_new_with_label("Sigterm");
gtk_fixed_put(GTK_FIXED(frame), button4, 8, 150);
gtk_widget_set_size_request(button4, 80, 35);

button5 = gtk_button_new_with_label("Sigstop");
gtk_fixed_put(GTK_FIXED(frame), button5, 8, 195);
gtk_widget_set_size_request(button5, 80, 35);

set = gtk_button_new_with_label ("Set");
gtk_fixed_put(GTK_FIXED(frame), set, 200, 80);
gtk_widget_set_size_request(set, 80, 35);

quit = gtk_button_new_with_label("Quit");
gtk_fixed_put(GTK_FIXED(frame), quit, 200, 195);
gtk_widget_set_size_request(quit, 80, 35);

vseparator = gtk_vseparator_new();
gtk_widget_set_size_request(vseparator, 10, 240);
gtk_fixed_put(GTK_FIXED(frame), vseparator, 95, 5);

label = gtk_label_new("Enter PID:");
gtk_fixed_put(GTK_FIXED(frame), label, 165, 20);

label2 = gtk_label_new("PID:");
gtk_fixed_put(GTK_FIXED(frame), label2, 110, 89);

label1 = gtk_label_new("0000");
gtk_fixed_put(GTK_FIXED(frame), label1, 140, 89);

entry = gtk_entry_new();
gtk_fixed_put(GTK_FIXED(frame), entry, 120, 40);
gtk_widget_grab_focus(entry);

g_object_set_data(G_OBJECT(set), "label1", label1);
g_object_set_data(G_OBJECT(set), "entry", entry);

g_signal_connect(GTK_BUTTON (set), "clicked", 
            G_CALLBACK (accept_clicked), set);

g_signal_connect_swapped(G_OBJECT(window), "destroy", 
        G_CALLBACK(gtk_main_quit), NULL);

g_signal_connect(button1, "clicked",
     G_CALLBACK(sendSighup), NULL);

g_signal_connect(button2, "clicked",
     G_CALLBACK(sendSigint), NULL);

g_signal_connect(button3, "clicked",
     G_CALLBACK(sendSigkill), NULL);

g_signal_connect(button4, "clicked",
     G_CALLBACK(sendSigterm), NULL);

g_signal_connect(button5, "clicked",
     G_CALLBACK(sendSigstop), NULL);


g_signal_connect(G_OBJECT(quit), "clicked", 
        G_CALLBACK(gtk_main_quit), G_OBJECT(window));


gtk_widget_show_all(window);
gtk_widget_show(entry);
gtk_widget_show(label);

gtk_main();

return 0;
}
#包括
#包括
pid_t pid;
void sendSighup(GtkWidget*小部件、GtkWidget*条目、gpointer标签){
pid=gtk_条目_获取_文本(gtk_条目(条目));
杀死(pid、SIGHUP);
}
void sendSigint(GtkWidget*小部件,gpointer标签){
kill(pid,SIGINT);
}
void sendSigkill(GtkWidget*小部件,gpointer标签){
kill(pid,SIGKILL);
}
void sendSigterm(GtkWidget*小部件,gpointer标签){
kill(pid,SIGTERM);
}
void sendSigstop(GtkWidget*小部件,gpointer标签){
压井(pid、SIGSTOP);
}
接受单击(GTK按钮*按钮,GObject*上下文对象)
{
GtkLabel*接受标签1=g_对象获取数据(上下文对象,“标签1”);
GtkEntry*accept_entry=g_object_get_data(上下文对象,“条目”);
const char*entry_in=gtk_entry_get_text(接受_entry);
gtk标签设置文本(接受标签1,输入);
}
int main(int argc,char*argv[])
{
GtkWidget*窗口;
GtkWidget*框架;
GtkWidget*表;
GtkWidget*按钮1;
GtkWidget*按钮2;
GtkWidget*按钮3;
GtkWidget*按钮4;
GtkWidget*按钮5;
GtkWidget*退出;
GtkWidget*集;
GtkWidget*vseparator;
GtkWidget*条目;
GtkWidget*标签;
GtkWidget*标签1;
GtkWidget*标签2;
gtk_init(&argc,&argv);
窗口=gtk_窗口_新建(gtk_窗口_顶层);
gtk_窗口设置标题(gtk_窗口(窗口),“发送信号”);
gtk_窗口设置默认大小(gtk_窗口(窗口),300250);
gtk_窗口设置位置(gtk_窗口(窗口)、gtk_WIN_位置中心);
框架=gtk_固定_新();
gtk_容器添加(gtk_容器(窗口),框架);
button1=gtk_按钮_新_,带有_标签(“Sighup”);
gtk_固定放置(gtk_固定(框架),按钮1、8、15);
gtk小部件设置大小请求(按钮1、80、35);
button2=gtk_按钮_新_,带_标签(“Sigint”);
gtk_固定放置(gtk_固定(框架),按钮2、8、60);
gtk小部件设置大小请求(按钮2、80、35);
button3=gtk_按钮_新_,带有_标签(“Sigkill”);
gtk_固定放置(gtk_固定(框架),按钮3、8、105);
gtk小部件设置大小请求(按钮3、80、35);
button4=gtk_按钮_新_,带有_标签(“Sigterm”);
gtk_固定放置(gtk_固定(框架),按钮4、8、150);
gtk小部件设置大小请求(按钮4、80、35);
button5=gtk_按钮_新_,带有_标签(“Sigstop”);
gtk_固定放置(gtk_固定(框架),按钮5、8、195);
gtk小部件设置大小请求(按钮5、80、35);
set=gtk_按钮_新_带_标签(“set”);
gtk_固定放置(gtk_固定(框架),套件,200,80);
gtk_widget_set_size_请求(set,80,35);
退出=gtk_按钮_新建_,带有标签(“退出”);
gtk_fixed_put(gtk_fixed(帧),退出,200195);
gtk_widget_set_size_请求(quit,80,35);
vseparator=gtk_vseparator_new();
gtk小部件设置大小请求(vseparator,10240);
gtk_固定放置(gtk_固定(框架),V分离器,95,5);
label=gtk_label_new(“输入PID:”);
gtk_固定放置(gtk_固定(框架),标签,165,20);
标签2=gtk_标签_新(“PID:”);
gtk_固定放置(gtk_固定(框架),标签2,110,89);
标签1=gtk_新标签(“0000”);
gtk_固定放置(gtk_固定(框架),标签1、140、89);
entry=gtk_entry_new();
gtk_固定放置(gtk_固定(框架),入口,120,40);
gtk_控件_抓取_焦点(条目);
g_对象_集合_数据(g_对象(集合),“label1”,label1);
g_对象\集合\数据(g_对象(集合),“条目”,条目);
g_信号_连接(GTK_按钮(设置),“点击”,
G_回调(接受_单击),设置);
g_信号连接交换(g_对象(窗口),“销毁”,
G_回调(gtk_main_quit),NULL);
g_信号连接(按钮1,“点击”,
G_回调(sendSighup),NULL);
g_信号连接(按钮2,“点击”,
G_回调(sendSigint),NULL);
g_信号连接(按钮3,“点击”,
G_回调(sendSigkill),NULL);
g_信号连接(按钮4,“点击”,
G_回调(sendSigterm),NULL);
g_信号连接(按钮5,“点击”,
G_回调(sendSigstop),NULL);
g_信号连接(g_对象(退出),“单击”,
G_回调(gtk_main_quit),G_对象(window));
gtk_小部件_全部显示(窗口);
gtk_widget_show(条目);
gtk_widget_show(标签);
gtk_main();
返回0;
}

在该行中,您可以使用普通的旧
atoi

pid = atoi(gtk_entry_get_text(GTK_ENTRY(entry)));
或者使用更复杂的函数,例如。

返回char*——指向char的指针。您正在代码中将一个指向char的指针指定给int。这是根据C标准定义的实现,可能不是您想要的,这就是编译器向您发出警告的原因:

6.3.2.3第6页:

任何指针类型都可以转换为整数类型。除了作为 前面指定的结果是实现定义的。如果 无法在整数类型中表示结果,行为为 未定义。结果不必在任何值的范围内 整数类型

例如,看一看这段代码,它精确地表示了您的问题:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
        char *p ="123456";
        int i = p;
        printf("%d\n", i);
        printf("%p\n", p);
        exit 0;
}
指向char的指针被分配到第7行的int。这会产生与代码中相同的错误:

main.c:7:17:警告:初始化从指针生成整数 没有强制转换[默认情况下启用]

现在让我们看看这个赋值的结果是什么-不要忘记这是一个实现定义的行为。第一个printf打印赋值后
i
变量的值。第二个printf使用
%p
说明符打印指针持有的地址,该说明符以实现定义的方式打印指针值。这些值原来是相同的-
0x80485b0
是十六进制的
134514096
。这里发生的是指针值(即地址)已分配给int。代码中也发生了同样的情况。C是一种非常简单的语言,它不会在背后做任何事情。它不会自动将字符串中写入的一系列数字转换为整数。若要将字符串转换为数字,您需要使用您正在使用的库提供的标准函数或自定义函数
134514096
0x80485b0