从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; } 
  1. 这应该被声明为const char*的数组,因为你要为它分配字符串文字(它是不可变的)。

  2. random也应该声明为const char*

  3. 使用%来获取特定范围内的随机数传统上并不是很好。 另请参阅Q13.16如何在一定范围内获得随机整数? 来自comp.lang.c FAQ。

  4. printf(random)很危险。 如果您正在打印的字符串恰好包含%字符,那么printf会出现exception(这可能是一个安全漏洞)。 你总是应该更喜欢printf("%s", random) 。 因为你可能想要一个尾随换行符,它应该是printf("%s\n", random)或者只是puts(random)