繁体   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