Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C参数输入_C - Fatal编程技术网

C参数输入

C参数输入,c,C,有没有更好的方法来吸收投入, 例如: ls=列出当前目录中的所有文件。。。 cat Q1.c将显示etc 在我看来,这一点似乎是我在硬编码 int main(int argc, char *argv[]) { int i; char *dest = NULL; if(argc==1) { printf( "No arguments were passed.\n" ); } else { printf("Argume

有没有更好的方法来吸收投入, 例如: ls=列出当前目录中的所有文件。。。 cat Q1.c将显示etc

在我看来,这一点似乎是我在硬编码

int main(int argc, char *argv[])
{    
    int i;
    char *dest = NULL;
    if(argc==1) {
        printf( "No arguments were passed.\n" );
    } 
    else {
        printf("Arguments:\n");
        for(i=1;i<argc;++i) {
            printf("%d. %s\n", i, argv[i]);
            dest = malloc(strlen(argv[i])+1);
            if(i<2) {
                sprintf(dest, "%s",argv[i]);    
            }
            else {
                sprintf(dest, "%s %s", argv[i-1], argv[i]); 
            }
        }   
        mysystem(dest);
    }
    return 0;
}
intmain(intargc,char*argv[])
{    
int i;
char*dest=NULL;
如果(argc==1){
printf(“未传递任何参数。\n”);
} 
否则{
printf(“参数:\n”);

对于(i=1;i,正如Bruce在评论中所说的,我猜您正在寻找此选项的快速解析器。它可以让您轻松地解析参数,但请注意,这些都是POSIX的成员


getopt():。/示例-audp://127.0.0.1:8000


getopt_long():。/示例--地址=udp://127.0.0.1:8000

正如Bruce在评论中所说的,我猜您正在寻找此选项的快速解析器。它可以让您轻松解析参数,但请注意,这些都是POSIX的成员


getopt():。/示例-audp://127.0.0.1:8000


getopt_long():。/示例--地址=udp://127.0.0.1:8000

您没有为
mysystem
建立缓冲区。以下是工作代码[请原谅这种不必要的风格清理]:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>

int
main(int argc, char *argv[])
{
    int i;
    char *dest = NULL;
    char *dp;
    char *av;
    int totlen;
    int len;

    if (argc == 1) {
        printf("No arguments were passed.\n");
    }

    else {
        // get total amount of space we'll need
        totlen = 0;
        for (i = 1; i < argc; ++i) {
            av = argv[i];
            len = strlen(av);
            totlen += len + 1;
        }

        dest = malloc(totlen + 1);
        dp = dest;
        *dp = 0;

        printf("Arguments:\n");
        for (i = 1; i < argc; ++i) {
            av = argv[i];

            printf("%d. %s\n", i, av);

            if (i > 1)
                *dp++ = ' ';

            strcpy(dp,av);
            dp += strlen(av);
        }

        system(dest);
    }

    return 0;
}
#包括
#包括
#包括
#包括
int
main(int argc,char*argv[])
{
int i;
char*dest=NULL;
char*dp;
char*av;
int托特伦;
内伦;
如果(argc==1){
printf(“未传递任何参数。\n”);
}
否则{
//获取我们需要的总空间量
totlen=0;
对于(i=1;i1)
*dp++='';
strcpy(dp,av);
dp+=strlen(av);
}
系统(dest);
}
返回0;
}

您没有为
mysystem
建立缓冲区。以下是工作代码[请原谅这种不必要的风格清理]:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>

int
main(int argc, char *argv[])
{
    int i;
    char *dest = NULL;
    char *dp;
    char *av;
    int totlen;
    int len;

    if (argc == 1) {
        printf("No arguments were passed.\n");
    }

    else {
        // get total amount of space we'll need
        totlen = 0;
        for (i = 1; i < argc; ++i) {
            av = argv[i];
            len = strlen(av);
            totlen += len + 1;
        }

        dest = malloc(totlen + 1);
        dp = dest;
        *dp = 0;

        printf("Arguments:\n");
        for (i = 1; i < argc; ++i) {
            av = argv[i];

            printf("%d. %s\n", i, av);

            if (i > 1)
                *dp++ = ' ';

            strcpy(dp,av);
            dp += strlen(av);
        }

        system(dest);
    }

    return 0;
}
#包括
#包括
#包括
#包括
int
main(int argc,char*argv[])
{
int i;
char*dest=NULL;
char*dp;
char*av;
int托特伦;
内伦;
如果(argc==1){
printf(“未传递任何参数。\n”);
}
否则{
//获取我们需要的总空间量
totlen=0;
对于(i=1;i1)
*dp++='';
strcpy(dp,av);
dp+=strlen(av);
}
系统(dest);
}
返回0;
}

查看getopt_long标准库调用我无法判断问题所在。您没有为sprintf(dest、%s%s)、argv[i-1”、argv[i]分配足够的内存
注意:每个循环都会用另一个内存分配覆盖
dest
,因此您无法
释放任何以前的
内存。查看getopt_long标准库调用我无法判断您的问题是什么。您没有为
sprintf(dest、%s)、argv[i-1]和argv[i]分配足够的内存
注意:每个循环都会用另一个内存分配覆盖
dest
,因此您不能
释放以前的任何内存。不客气!我希望您的原始代码和我的调整之间的差异足够清楚,以便您理解我所做的事情和原因。无论如何,编程愉快!不客气!我希望您的原始代码和我的调整之间的ces足够清晰,您可以理解我做了什么以及为什么。无论如何,祝您编程愉快!