2

我完全被难住了。我有这个小东西可以简化在 linux 下安装MTP单元,但由于某种原因,我无法在使用变量时让libnotify显示我的图标。如果我对完整路径进行硬编码,它可以正常工作,但是当将变量用作getcwdand时getenv,它不会显示。

这是一段代码:

char cwd[1024];
char *slash = "/";  
{
NotifyNotification *mount;
notify_init ("Galaxy Nexus mounter");
    if (getcwd(cwd, sizeof(cwd)) != NULL)
    {
        mount = notify_notification_new ("Samsung Galaxy Nexus", "Mounted at ~/Nexus", ("%s%sandroid_on.png", cwd, slash));
        fprintf(stdout, "Icon used %s%sandroid_on.png\n", cwd, slash);
        system("jmtpfs ~/Nexus");
        notify_notification_set_timeout (mount, 2000);
        notify_notification_show (mount, NULL);
    }
    }

我究竟做错了什么?

4

2 回答 2

1
("%s%sandroid_on.png", cwd, slash)

您是否知道 C 中的此表达式等效于?

(slash)

逗号运算符没有其他作用!

您可能想要执行以下操作:

char png[1100];
sprintf(png, "%s%sandroid_on.png", cwd, slash);
mount = notify_notification_new ("Samsung Galaxy Nexus", "Mounted at ~/Nexus", png);

或者更简单,特别是如果你知道你不会溢出 char 数组:

strcat(cwd, slash);
strcat(cwd, "android_on.png");
mount = notify_notification_new ("Samsung Galaxy Nexus", "Mounted at ~/Nexus", cwd);
于 2012-09-12T17:56:05.937 回答
1

这看起来不对:

mount = notify_notification_new ("Samsung Galaxy Nexus", "Mounted at ~/Nexus", ("%s%sandroid_on.png", cwd, slash));

第三个参数应该是字符串吗?如果是这样,您需要使用 snprintf 单独构建它:

char path[1000];
snprintf (path, sizeof(path), "%s%sandroid_on.png", cwd, slash);
mount = notify_notification_new ("Samsung Galaxy Nexus", "Mounted at ~/Nexus", path);
fprintf(stdout, "Icon used %s\n", path);
于 2012-09-12T18:00:22.787 回答