C 将argv[1]复制到数组中

C 将argv[1]复制到数组中,c,C,我有以下代码,我不想使用buf[]的内容,我想在buf[]中只包含argv[1]中的内容 我可以将argv[1]中的内容分配给数组吗 我希望此代码分隔存储在argv[1]中的参数。 假设我有: /myprog "A 2 3 4" in.txt out.txt argv[1]将是“a23,b67c3,d5”,我想把那个位置的所有东西分开 #include<stdio.h> #include<stdlib.h> #include<string.h> int m

我有以下代码,我不想使用
buf[]
的内容,我想在
buf[]
中只包含
argv[1]
中的内容

我可以将
argv[1]
中的内容分配给数组吗

我希望此代码分隔存储在
argv[1]
中的参数。 假设我有:

/myprog "A 2 3 4" in.txt out.txt
argv[1]
将是
“a23,b67c3,d5”
,我想把那个位置的所有东西分开

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

int main(int argc, char const *argv[])
{
    char buf[]="a b c,d e f,g h i,e a b";
    int i = 0;
    int c=0;
    char *p = strtok (buf, ",");
    char *array[5];
    char *buf2[20];
    char *vec[20];
    while(p!=NULL)
    {
        array[i++]=p;
        c++;
        p=strtok(NULL,",");
    }
    for(i=0;i<c;i++)
        printf("%s\n",array[i]);   
    for(i=0;i<c;i++)
        *(buf2+i)=*(array+i);
    int pos=0;
    int pa=c;
    c=0;
    for(pos=0;pos<pa;pos++)
    {
        char *q = strtok (buf2[pos], " ");
        i=0;
        while(q!=NULL)
        {
            vec[i++]=q;
            q=strtok(NULL," ");
            c++;
        }    
        for(i=0;i<c;i++)
            printf("%s\n", vec[i]);
        c=0;    
    }    
    return 0;
}
#包括
#包括
#包括
int main(int argc,char const*argv[]
{
char buf[]=“abc,def,ghi,eab”;
int i=0;
int c=0;
char*p=strtok(buf,“,”);
字符*数组[5];
char*buf2[20];
char*vec[20];
while(p!=NULL)
{
数组[i++]=p;
C++;
p=strtok(空,“,”);
}

对于(i=0;i您可以直接标记化
argv[1]

char *p = strtok (argv[1], ",");

(当然,前提是它存在:
argc>1
)。

确保
buf
足够大,可以容纳
argv[1]
中的(以null结尾的)字符串,只需
strcpy
它?哦,您应该为那些
strtok
循环添加一些边界检查!这
*(buf2+i)=*(array+i)
调用未定义的行为,如写入
buf2+i
点,而
buf2
未初始化,因此其元素不指向任何地方。@alk No,因为这等于
buf2[i]=array[i]<代码> Buff2数组是指针数组。@罗伯特:好的变量命名,以及关于你正在做什么(为什么)、一致风格和一致使用变量的注释(不要在代码中间改变变量的用途)对于代码的可读性、可理解性和可维护性来说,这些都非常重要。问题是,
strtok
修改了它标记的字符串。这可能并不总是需要的,而且在命令行参数的情况下也可能不总是可能的。@Someprogrammerdude在修改
ar时,您能举个例子吗gv
可能会导致问题?似乎我错了(通常严格遵循标准)说没关系。我道歉。但可能仍然不需要它。:)