从C中的数组中随机选取字符串
void pick() { char* words[2]; words[0] = "blah"; words[1] = "hmm"; char random; srand(time(NULL)); random = words[rand() % 2]; printf(random); return; }
这是我的代码,我想从单词数组中随机选择一个单词,但是当我运行它时,编译器说:[警告]赋值从指针生成整数而没有强制转换[默认启用]
您已将random
声明为char
,这是一个单字节整数值。 您将从words
数组中为其分配一个元素,并且每个元素都是char*
类型。 因此,您在尝试将char*
分配给整数值时收到错误。
你的意思是将random
声明为char*
。
关于你的代码我会指出的其他事情:
void pick() { char* words[2]; // 1 words[0] = "blah"; words[1] = "hmm"; char random; // 2 srand(time(NULL)); random = words[rand() % 2]; // 3 printf(random); // 4 return; }
-
这应该被声明为
const char*
的数组,因为你要为它分配字符串文字(它是不可变的)。 -
random
也应该声明为const char*
。 -
使用
%
来获取特定范围内的随机数传统上并不是很好。 另请参阅Q13.16如何在一定范围内获得随机整数? 来自comp.lang.c FAQ。 -
printf(random)
很危险。 如果您正在打印的字符串恰好包含%
字符,那么printf
会出现exception(这可能是一个安全漏洞)。 你总是应该更喜欢printf("%s", random)
。 因为你可能想要一个尾随换行符,它应该是printf("%s\n", random)
或者只是puts(random)
。