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