如何将字符串中的单个字符分配给C中的另一个字符串?

时间:2014-05-22 16:04:09

标签: c string copy

我有

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

我希望将上面字符串中的随机字母分配给名为

的字符串
char guess[2]

这是我到目前为止所做的:

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

我知道这不会起作用,因为它会尝试将整个alphabet复制到guess对吗? 我只想给guess分配一个随机字母,这样我就可以创建一个刽子手程序,我希望PC能够猜出秘密字母的字母。在该程序的先前版本中,我是那个猜字母的人所以我只是使用了

gets(guess);

去做。我希望它是相同的,但PC猜测来自alphabet字符串的随机字母。这可能吗?

4 个答案:

答案 0 :(得分:2)

放弃任何形式的strcpy

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

但是如果您想将其用作char而不是数组,只需声明char guess;并使用它。

答案 1 :(得分:1)

  

我知道这不会奏效,因为它会尝试将整个字母表复制到猜测中吗?

对于"不会工作",但不完全正确的原因部分:它会尝试使用alphabet[r]作为地址,会导致不确定的行为。

获得单个char要简单得多 - 你不需要一个函数,你可以这样做:

char guess = alphabet[r];

它就是 - 只需一个简单的作业即可复制一个char

  

在该程序的先前版本中,我是那个猜字母的人所以我刚用gets(guess)

这解释了为什么您将guess声明为char[2]而不是char。在这个版本的程序中你不需要像这样做,因为你没有读取输入,所以你不需要额外的空终止符。

另请注意,不应使用gets - 它本质上是不安全的,因为它很容易导致缓冲区溢出。您应该使用fgets,因为您可以将缓冲区的大小传递给fgets,并确保它不会超过缓冲区的末尾。

答案 2 :(得分:1)

为什么不做一些像

这样的事情
guess[0] = alphabet[r];

答案 3 :(得分:1)

正如您可以使用alphabet从数组alphabet[index]中读取单个字符一样,您也可以以相同的方式设置单个字符,因此:

guess[0] = alphabet[r];

为了确保猜测可以用作以NUL结尾的字符串,您需要确保第二个字符为NUL:

guess[1] = '\0';

代码中的最后一个错误如下:

int r = rand() % 28;

28需要被26替换(只有26个有效值)。