我只想使用库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];
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'中有多种其他处理字符串的方法。