在C语言中,如何将一个字符串中的单个字符分配给另一个字符串?
我有 我想把上面字符串中的一个随机字母分配给一个名为在C语言中,如何将一个字符串中的单个字符分配给另一个字符串?,c,string,copy,C,String,Copy,我有 我想把上面字符串中的一个随机字母分配给一个名为 char alphabet[27] = {"abcdefghijklmnopqrstuvwxyz"}; 这就是我到目前为止所做的: char guess[2] 我知道这行不通,因为它会试图将整个字母表复制到guess中,对吗? 我只想把一个随机字母分配给guess,这样我就可以创建一个刽子手程序,我想让电脑猜出这个秘密单词的字母。在以前版本的程序中,我是猜字母的人,所以我只使用了 srand(time(NULL)); in
char alphabet[27] = {"abcdefghijklmnopqrstuvwxyz"};
这就是我到目前为止所做的:
char guess[2]
我知道这行不通,因为它会试图将整个字母表
复制到guess
中,对吗?
我只想把一个随机字母分配给guess
,这样我就可以创建一个刽子手程序,我想让电脑猜出这个秘密单词的字母。在以前版本的程序中,我是猜字母的人,所以我只使用了
srand(time(NULL));
int r = rand() % 28;
char strcpy(guess, alphabet[r]);
去做吧。我希望它是一样的,但电脑猜测字母表中的随机字母。这可能吗?放弃任何形式的strcpy:
gets(guess);
但是如果您想将其用作
char
,而不是数组,只需声明char guess编码>并使用它。只要放弃任何形式的strcpy即可:
gets(guess);
但是如果您想将其用作char
,而不是数组,只需声明char guess编码>并按原样使用它
我知道这行不通,因为它会把整个字母表复制到猜猜中,对吗
在“不起作用”部分正确,但在“为什么”部分不完全正确:它将尝试使用字母[r]
作为地址,这将导致未定义的行为
获取单个char
要简单得多-您不需要函数,可以执行以下操作:
srand(time(NULL));
int r = rand() % 26;
guess[0] = alphabet[r];
guess[1] = '\0';
就这样-一个字符
可以通过简单的赋值复制
在以前版本的程序中,我是猜字母的人,所以我只使用了get(guess)
这解释了为什么将guess
声明为char[2]
,而不是声明为char
。在这个版本的程序中,您不需要这样做,因为您没有读取输入,所以不需要为空终止符添加额外的位置
还要注意的是,不应使用gets
,这本身就是不安全的,因为它很容易导致缓冲区溢出。您应该改用fgets
,因为您可以将缓冲区的大小传递给fgets
,并确保它不会超过缓冲区的末尾
我知道这行不通,因为它会把整个字母表复制到猜猜中,对吗
在“不起作用”部分正确,但在“为什么”部分不完全正确:它将尝试使用字母[r]
作为地址,这将导致未定义的行为
获取单个char
要简单得多-您不需要函数,可以执行以下操作:
srand(time(NULL));
int r = rand() % 26;
guess[0] = alphabet[r];
guess[1] = '\0';
就这样-一个字符
可以通过简单的赋值复制
在以前版本的程序中,我是猜字母的人,所以我只使用了get(guess)
这解释了为什么将guess
声明为char[2]
,而不是声明为char
。在这个版本的程序中,您不需要这样做,因为您没有读取输入,所以不需要为空终止符添加额外的位置
还要注意的是,不应使用gets
,这本身就是不安全的,因为它很容易导致缓冲区溢出。您应该改用fgets
,因为您可以将缓冲区的大小传递给fgets
,并确保它不会超过缓冲区的末尾。为什么不这样做呢
char guess = alphabet[r];
为什么不做些像这样的事情呢
char guess = alphabet[r];
?正如您可以使用字母表[index]
从数组字母表中读取单个字符一样,您也可以使用相同的方式设置单个字符,因此:
guess[0] = alphabet[r];
要确保guess可以用作以NUL结尾的字符串,您需要确保第二个字符是NUL:
guess[0] = alphabet[r];
代码中的最后一个bug如下所示:
guess[1] = '\0';
28需要替换为26(只有26个有效值)。正如您可以使用字母表[index]
从数组字母表中读取单个字符一样,您也可以用相同的方式设置单个字符,因此:
guess[0] = alphabet[r];
要确保guess可以用作以NUL结尾的字符串,您需要确保第二个字符是NUL:
guess[0] = alphabet[r];
代码中的最后一个bug如下所示:
guess[1] = '\0';
28需要替换为26(只有26个有效值)。您的字母表中有多少个字母?我使用的全英文字母表有27个字母。您确定吗?您的字母表中有多少个字母?我使用的全英文字母表有27个字母。您确定吗?加上guess[1]='\0'代码>如果你不想让一个以NUL结尾的stringplusguess[1]='\0'代码>如果您不想使用以NUL结尾的字符串