[英]How can i increase a value of an variable passed as an argument to a function in C
[英]Execv function in C not reading a variable that is passed in as an argument
所以我正在构建我自己的 shell,我想要的命令之一是“cat”函数。 为此,我使用 execv 函数并传入“cat”的正确 bin 路径以及我想要连接并打印到终端的文件名。
下面的代码工作得很好,但我在我想要“cat”的文件名中进行了硬编码
void cat(char *fileName)
{
char *bin_path = "/bin/cat";
printf("%d\n", strncmp(fileName, "junk.txt", strlen("junk.txt"))); // returns 0, meaning equal values
char *args[] = {bin_path, "junk.txt", NULL};
execv(bin_path, args);
}
上面的输出如下所示参数被硬编码在
但是我希望能够使这个函数动态化并将文件名传递给函数,所以这就是我将变量 fileName 作为参数的原因。 您可以看到我将字符串文字“junk.txt”与 fileName 变量进行比较,它返回 0,这意味着它们相等! 但是当我将变量 fileName 传递给 execv 函数时,它不起作用。 请在下面查看我损坏的代码
void cat(char *fileName)
{
char *bin_path = "/bin/cat";
printf("%d\n", strncmp(fileName, "junk.txt", strlen("junk.txt"))); // returns 0, meaning equal values
char *args[] = {bin_path, fileName, NULL};
execv(bin_path, args);
}
任何人都知道这是为什么?
可能您将文件名作为整行读取并在行尾获得换行符。 strncmp
只比较你告诉它的字符数,所以零结果不能证明字符串是相等的。 我们甚至可以在cat
的错误消息中看到换行符:在“junk.txt”之后,它的“:”在一个新行上。
更改调用例程以从名称中删除不需要的换行符。
将来,始终提供带有调试问题的最小可重现示例。 在这种情况下,错误出现在您没有显示的代码中,在调用例程中,这就是为什么应该始终提供 MRE。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.