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