Linux 上直接传参给argv打印出来是乱码
int main(int argc, char const *argv[])
{
printf("%s\n",argv+1);
if (strcmp(argv + 1, "1")==0)
{
get_user_info();
}
if (strcmp(argv + 1, "0")==0)
{
read_user_info();
}
return 0;
}
#include <stdio.h>
#include <string.h>
int main(int argc, char const *argv[])
{
printf("%s %d\n", argv[0], argc);
if (argc != 1)
{
printf("%s\n", argv[1]);
if (strcmp(argv[1], "1") == 0)
{
// get_user_info();
}
if (strcmp(argv[1], "0") == 0)
{
// read_user_info();
}
}
return 0;
}
argv是输入的参数啊!你这里怎么做输出呢?
不知道你这个问题是否已经解决, 如果还没有解决的话:到目前为止,大部分人编写的所有程序都可以用一个命令运行。举个例子,如果我们编译了一个称之为 myprog
的可执行程序,我们能够在 Linux 命令行使用以下命令运行它:
./myprog
但是,如果你想从命令行向正在运行的程序传递信息,该怎么办?考虑一个更复杂的程序,比如 GCC。要编译 myprog
的可执行文件,我们在命令行输入以下内容:
gcc -o myprog myprog.c
字符串 -o
, myprog
和 myprog.c
都是 gcc 的命令行参数。(从技术上讲,gcc
也是一个参数,我们稍后会看到)
命令行参数非常有用。毕竟,如果不能向 C 函数传递参数,C 函数就不会很有用了——添加向程序传递参数的功能会使它们更有用。事实上,你在命令行上传递的所有参数最终都作为程序中 main
主函数的参数。
到目前为止,我们用于 C 程序的框架大致如下:
#include <stdio.h>
int main()
{
return 0;
}
从现在开始,我们的示例可能看起来更像这样:
#include <stdio.h>
int main(int argc, char *argv[])
{
return 0;
}
正如你所看到的,main
函数现在有了参数。变量 argc
代表“参数数量”;argc
包含传递给程序的参数个数。变量 argv
代表“参数向量”。向量(vector)是一维数组,argv
是字符串的一维数组。每个字符串都是传递给程序的参数之一。
例如命令行:
gcc -o myprog myprog.c
将产生 GCC 内部的以下值:
argument | value |
---|---|
argc | 4 |
argv[0] | gcc |
argv[1] | -o |
argv[2] | myprog |
argv[3] | myprog.c |
如你所见,第一个参数(argv[0]
)是调用程序的名称,在本示例中它是 gcc
。因此,程序将始终至少有一个参数,argc
将始终至少为 1
。
以下程序接受任意数量的命令行参数并将其打印出来:
#include <stdio.h>
int main(int argc, char const *argv[]) {
printf("argc: %d\n", argc);
for (int i = 0; i < argc; i++) {
printf("argv[%d] = %s\n", i, argv[i]);
}
return 0;
}
如果你编译你的程序名为 myprog
,然后以 ./myprog a b c
的方式调用它,则它会输出以下的打印:
user@hostname:examples$ ./myprog a b c
argc: 4
argv[0] = ./myprog
argv[1] = a
argv[2] = b
argv[3] = c
问题分析: 根据参考资料中提到的内容,我们应该做以下几步来解决这个问题: 1. 使用main函数的参数argc和argv来接收命令行传递的参数。 2. 使用printf函数打印参数。
解决方案: 首先,我们需要在代码中使用main函数的参数argc和argv来接收命令行传递的参数。然后,我们使用printf函数来打印这些参数。下面是具体的代码示例:
#include <stdio.h>
int main(int argc, char *argv[]) {
printf("argc: %d\n", argc);
for (int i = 0; i < argc; i++) {
printf("argv[%d] = %s\n", i, argv[i]);
}
return 0;
}
以上代码中,我们首先打印出argc的值,即接收到的参数的个数。然后,使用循环遍历argv数组,打印出每个参数的值。运行程序并传递参数,即可看到打印出来的参数值。
请注意,根据参考资料中的描述,argv[0]存储的是调用程序的名称,而不是文件名。
以上就是解决该问题的具体步骤和代码示例。如果你有任何其他问题,请随时提问。