是否可以执行argc = 0的进程? 我需要执行一个程序,但它的argc等于0是非常重要的。有没有办法做到这一点? 我试图在命令行中放置2 ^ 32个参数,使其看起来好像argc = 0但是参数数量有一个最大限制。
所以,我正在尝试创建一个管道,通过argv []连接的管道来回发送char数组。 现在,我一直坚持在接口中接收数组(从父节点发送到子节点的c_param的参数)。在db.c中接收字符3和5。 我知道3和5是我的管道所在的argv []的索引,但我不知道如何接受它并在db.c中打印出我的消息。 interface.c创建管道,分叉到父进程和子进程。 char数组param被转移到子进程到char数组c_param。 使用snprintf,我将我的管道变成了一个char,使用execl和我的char数组c_param发送。 interface.c: int main (int argc, char *argv[]) { int to_Child[2]; int to_Parent[2]; int id, toChildPipe, toParentPipe, err; char param[100] = “This is the parameter!”; char sendPipe[100]; char recPipe[100]; /*CREATING PIPE*/ toChildPipe = pipe(to_Child); toParentPipe = pipe(to_Parent); if(toChildPipe == -1 || toParentPipe == -1) { printf (“Error on […]
我正在用C语言编写一个程序来生成大量进程,并且应该通过argv [0]报告它们的状态,所以在调用ps很容易看出发生了什么。 我知道最初argv [0]带有一定的内存分配,包含程序名称(在大多数情况下)。 但是,我需要设置比包含程序名称的20个字节更长的字符串。 我的状态可以是80-100个字符。 我做了一些测试,如果我把这个更长的字符串记忆到argv [0]中它“对我有效”但我担心我会开始写入无主内存并导致段错误,这是不可接受的。 如何安全地调整为argv [0]分配的内存? 示例代码: #include #include #include char* generate_really_long_program_name() { return strdup(“here is something that generates really long program name\0”); } int main (int argc, char *argv[]) { printf(“Current argv[0] length: %zu\n”, strlen(argv[0])); char* my_program_name = generate_really_long_program_name(); strncpy(argv[0], my_program_name, strlen(my_program_name)); // Can this segfault? free(my_program_name); printf(“New argv[0] length: […]
我在C中操作目录时遇到了麻烦。 我想在main上给出2个目录的名称作为参数 检查第一个目录是否存在(在当前路径中) 打开目录 调用一个函数(我创建的)来创建文件并在目录中执行操作 关闭目录并进入第二个目录并执行相同操作。 我写了我的代码,但它仍然没有做我在main上的目录里面的东西,而是看起来我总是位于当前目录,所以打开目录的调用不好??? 这就是我所做的: int main(int argc, char *argv[]) { int i = 0; char cwd[1024]; if(argc < 3) { printf("Erreur dans les arguments\n"); } else { for(i = 1; i < argc; i++) { if (getcwd(cwd, sizeof(cwd)) == NULL) { printf("an error occured when getting current directory\n"); } // make […]
我在下面写了一个代码 #include int main(int argc, char *argv[]) { char cmd[50]=”dir”; if (argc == 2) { sprintf(cmd,”dir %s”,argv[1]); } if (argc == 3) { sprintf(cmd,”dir %s %s”, argv[1], argv[2]); } printf(“%s\n”,cmd); system(cmd); return 0; } 当我执行如下 我认为不能通过* argv []传递’*’ 我怎么能传递像“* .c”这样的东西? 更新 码 #include int main(int argc, char *argv[]) { char cmd[50]=”dir”; if (argc == 2) […]
if(strcmp(argv[2], NULL) == 0) 我传递了3个命令行参数,但我也想用上面的语句只用2个命令行参数来运行它。 但是正在显示分段错误错误。 我也尝试过 if(argc < 3) 但它也没有用……同样的分段错误……
我将argv []定义为char *。 使用以下printf语句: printf(“%s\n”,argv[1]); // prints out the entire string printf(“%p\n”,&argv[1]); // & -> gets the address printf(“%c\n”,argv[1][0]);// prints out the first char of second var printf(“%c\n”,*argv[1]); // 这是我不明白的最后一个。 打印*argv[1]是什么意思? 为什么不和*argv[1][0] ,为什么你不能打印出printf(“%s\n”,*argv[1]); 。 另外,为什么&*argv[1]的地址不同?
到目前为止,我已经能够使用Visual C ++中的debugging命令正确查看我的C代码的输出。 但是,当脚本依赖于main函数中的参数(例如/ argc , argv )时,调试器似乎忽略这两个参数并将它们视为未初始化。 例如,在以下代码中,输出始终为printf(“Usage: find pattern\n”); 。 #include #include #define MAXLINE 1000 int getline(char *line, int max); /* find: print lines that match pattern from 1st arg */ main(int argc, char *argv[]) { char line[MAXLINE]; int found = 0; if (argc != 2) printf(“Usage: find pattern\n”); else while (getline(line, MAXLINE) […]
我正在检查一些OpenCV教程并在开头找到这一行(这里是链接,代码在CalcHist部分下面http://opencv.willowgarage.com/documentation/c/histograms.html ) if (argc == 2 && (src = cvLoadImage(argv[1], 1)) != 0) 我以前从未见过这个,真的不明白。 我检查了一些有关此主题的问答,但仍然不理解。 有人可以向我解释这条线的含义是什么? 谢谢!
我正在尝试从命令行向Fortran可执行文件传递参数。 在C中实现此目的的示例程序(取自此处 ): #include int main (int argc, char *argv[]) { int count; printf (“This program was called with \”%s\”.\n”,argv[0]); if (argc > 1) { for (count = 1; count < argc; count++) { printf("argv[%d] = %s\n", count, argv[count]); } } else { printf("The command had no other arguments.\n"); } return 0; } 该程序的输出是: This […]