gpt4 book ai didi

c - 如何编写一个从命令行接受 2 个字符串作为参数的 C 程序?

转载 作者:行者123 更新时间:2023-11-30 20:17:11 26 4
gpt4 key购买 nike

我想仅使用库 stdlib.h、stdio.h 和 string.h 编写 .c 程序。当调用 C 程序时,该程序将命令行的两个字作为输入 - 如下所示:

.mycode WORD1 WORD2

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

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

如果调用代码时传递的单词多于或少于 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 将等于“goodbye”,但尝试执行此操作时出现编译错误: char word1[]=argv[1];

最佳答案

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

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”中的字符串。

关于c - 如何编写一个从命令行接受 2 个字符串作为参数的 C 程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58574285/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com