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