void pick() {
char* words[2];
words[0] = "blah";
words[1] = "hmm";
char random;
srand(time(NULL));
random = words[rand() % 2];
printf(random);
return;
}
这是我的代码,我想从单词数组中随机选择一个单词,但是当我运行它时,编译器说:[警告]赋值从指针生成整数而没有强制转换[默认启用]
答案 0 :(得分:4)
您已将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*
。
使用%
获取特定范围内的随机数传统上并不是很好。另请参阅comp.lang.c常见问题解答中的Q13.16 How can I get random integers in a certain range? 。
printf(random)
很危险。如果您要打印的字符串恰好包含%
个字符,则printf
会出现行为异常(这可能是一个安全漏洞)。你总是应该选择printf("%s", random)
。由于你可能想要一个尾随换行符,它应该是printf("%s\n", random)
或puts(random)
。