簡體   English   中英

如何從命令行編寫一個 c 程序,它將 2 個字符串作為 arguments?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM