[英]How to write a c program that takes 2 strings as arguments from the command line?
我想僅使用庫 stdlib.h、stdio.h 和 string.h 編寫 a.c 程序。 當調用 C 程序時,該程序從命令行輸入兩個字 - 如下所示:
.mycode WORD1 WORD2
其中 WORD1 和 WORD2 都是不帶空格的一系列字符,形成一個單詞。
我想在我的代碼中將這兩個單詞存儲在 2 char arrays 中。
如果調用代碼時傳遞的字數多於或少於 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 hello goodbye
然后,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);
}
上面的代碼沒有復制字符串,而是復制了指向字符串的指針。 字符串本身在 memory 中占據了某個位置並停留在那里。
在許多情況下,您可能希望真正將字符串復制到新位置。 您的問題之一是您不知道字符串的長度是多少。
您可以使用動態分配或 varlength arrays,如下例所示:
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
function 將字符串的內容復制到 memory 中的不同位置。 memory 中的位置必須比字符串保持尾隨“0”所需的字符大 1 個字符;
在“c”中處理字符串還有多種其他方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.