如何编写一个以2个字符串作为命令行参数的c程序?

问题描述 投票:-2回答:1

我只想使用库stdlib.h,stdio.h和string.h编写.c程序。调用C程序时,该程序将从命令行输入两个单词-像这样:

.mycode WORD1 WORD2

其中WORD1和WORD2都是无空格的一系列字符,形成一个单词。

我想在我的代码中将这两个词存储在2个char数组中。

如果在调用代码时传递了少于或少于2个单词,我还必须向用户返回一条消息。

这是我正在尝试的内容:

int main(int argc, char *argv[])
{       
        //return error if user does not provide exactly two arguments
        if(argc!=3)
        {
                printf("Wrong number of arguments. Please input: ./codename WORD1 WORD2");
                exit(1);
        }

        char word1[]=argv[1];
        char word2[]=argv[2];

我希望如果我调用代码:./mycode你好再见

然后,word1等于“ hello”,而word2等于“再见”,但是尝试执行此操作时出现编译错误:char word1 [] = argv [1];

c string stdio
1个回答
0
投票

argv是字符串的pointers的数组。它们指向的字符串在程序运行期间是持久的。因此,您可以安全地传递指针并将它们传递给我们。但是您需要使用它们[[as poiters:

int main(int argc, char *argv[]) { //return error if user does not provide exactly two arguments if(argc!=3) { printf("Wrong number of arguments. Please input: ./codename WORD1 WORD2"); exit(1); } char *word1 = argv[1]; // word is a pointer to char char *word2 = argv[2]; printf ("%s, %s\n", word1, word2); }
上面的代码没有复制字符串,而是复制了指向字符串的指针。字符串本身在内存中占据一定位置,并停留在该位置。

[在许多情况下,您可能希望将字符串真正复制到新位置。您遇到的问题之一是您不知道字符串的长度是多少。

您可以使用动态分配或varlength数组,如以下示例所示:

int len1 = strlen(argv[1]); int len2 = strlen(argv[2]); char *word1 = malloc(sizeof (char) * (len1+1) ); // dynamic memory allocaion char word2[len2+1]; // variable length array declaration. strcpy(word1, argv[1]); strcpy(word2, argv[2]);

上面的示例实际上使用strcpy函数将字符串的内容复制到内存中的其他位置。内存中的位置必须比保留尾随'0'所需的字符串大1个字符;

['c'中有多种其他处理字符串的方法。

© www.soinside.com 2019 - 2024. All rights reserved.