c - C中通过unix系统命令打开图像文件

标签 c unix

我有一个项目,用户可以通过在菜单中选择文件来打开文件。 我有两段几乎相同的代码,但其中一段有效,而另一段则无效: 有效的方法是通过 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”的位置错误,请尝试以下操作:

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);
}

关于c - C中通过unix系统命令打开图像文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41826995/

相关文章:

bash - 正确对齐列的 Shell 脚本

linux - cp -sr 和 ln -s 之间的符号链接(symbolic link)差异

Git服务器不随便显示最新推送的文件

c - 这是一个使用堆栈检查 C 中括号平衡的程序,但它没有按预期工作

c++ - stdio.h对应的库文件是动态链接的还是静态链接的

c - 数组元素之间的最短差异

linux - 如何检查 Bash 中的两条路径是否相等?

c - Waf:创建自定义并行任务

c++ - 检查 fgets 是否会阻塞

linux - 如何检测一次性链接器的库顺序?