我有一个项目,用户可以通过在菜单中选择文件来打开文件。 我有两个几乎相同的代码片段,但有一个有用,而另一个没有: 有效的方法是通过gedit打开文本文件(“chemin”包含文件路径):
char buf[200];
snprintf(buf,sizeof(buf),"gedit %s",chemin);
system(buf);
这个在我的代码 中运行时不起作用,但在外面运行时可以正常工作(用eog打开.jpg文件 - 也试过xdg但没有改进):
snprintf(buf,sizeof(buf),"eog %s",chemin);
system(buf);
有没有更可靠的方法从unix命令行打开.jpg文件?还是我忘记了什么? TIA
更新
似乎缓冲区只将其前7个字符打印到命令行,即:
我的文件路径:./FICHIER_PROJET/basededonnee/basedeDonneefichier/IMG_RGB/21.jpg
命令行打印的内容:eog ./FI
这只适用于这些.jpg文件
答案 0 :(得分:1)
问题可能来自char' \ 0'有错误的地方,尝试类似的事情:
strncpy(buf, "eog ", 4);
strncat(buf, chemin, sizeof(chemin));
buf[4+sizeof(chemin)] = '\0';
if(system(buf) == -1){
perror("Error with the system call ");
exit(-1);
}
答案 1 :(得分:0)
解决了......我一直在为所有系统命令使用一个通用缓冲区。我为这个创建了一个新的缓冲区,它可以工作。