簡體   English   中英

如何在C中將一個字符串中的單個字符分配給另一個字符串?

[英]How to assign a single character from a string to another string in C?

我有

char alphabet[27] = {"abcdefghijklmnopqrstuvwxyz"};

我想將上述字符串中的隨機字母分配給一個名為

char guess[2]

這是我到目前為止的內容:

    srand(time(NULL));
    int r = rand() % 28;
    char strcpy(guess, alphabet[r]);

我知道這是行不通的,因為它將嘗試將整個alphabet復制到guess對嗎? 我只想分配一個隨機字母來guess這樣我就可以創建一個hangman程序,並且我希望PC可以猜測到秘密單詞的字母。 在該程序的先前版本中,我是猜字母的人,因此我只是使用了

gets(guess);

去做吧。 我希望它是相同的,但PC可以從alphabet字符串中猜測隨機字母。 那可能嗎?

只要放棄任何形式的strcpy

srand(time(NULL));
int r = rand() % 26;
guess[0] = alphabet[r];
guess[1] = '\0';

但是,如果要僅將其用作char而不是數組,則只需聲明char guess; 並按原樣使用它。

我知道這是行不通的,因為它將嘗試將整個字母復制到猜測中,對嗎?

正確的“行不通”,但不完全正確,為什么原因:它將嘗試使用alphabet[r]作為地址 ,這將導致未定義的行為。

獲取單個char比這簡單得多-您不需要功能,可以執行以下操作:

char guess = alphabet[r];

就是這樣-一個簡單的任務就可以復制一個char

在該程序的先前版本中,我是猜字母的人,因此我只使用了gets(guess)

這解釋了為什么您將guess聲明為char[2]而不是char 在此版本的程序中,您不需要這樣做,因為您不需要讀取輸入,因此不需要為空終止符添加額外的位置。

還要注意的是gets不應該使用-它本質上是不安全的,因為它很容易造成緩沖區溢出。 您應該改用fgets ,因為您可以將緩沖區的大小傳遞給fgets ,並確保它不會超出緩沖區的末尾。

為什么不做類似的事情

guess[0] = alphabet[r];

正如您可以從帶有alphabet[index]的數組alphabet讀取單個字符一樣,您也可以用相同的方式設置單個字符,因此:

guess[0] = alphabet[r];

為了確保可以將猜測用作NUL終止的字符串,您需要確保第二個字符為NUL:

guess[1] = '\0';

您的代碼中的最后一個錯誤在以下行中:

int r = rand() % 28;

需要將28替換為26(只有26個有效值)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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