从 C 中的数组中随机选取字符串

Ser*_*gio 1 c arrays random

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)

这是我的代码,我想从单词数组中随机选择一个单词,但是当我运行它时,编译器说:[警告]赋值使指针中的整数不带强制转换[默认启用]

jam*_*lin 5

您已声明random为 a char,它是一个单字节整数值。您将words数组中的一个元素分配给它,并且每个元素的类型都是char*char*因此,您在尝试将 a 分配给整数值时会收到错误。

您的意思是声明randomchar*.

我会指出关于您的代码的其他事项:

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)
  1. 这应该声明为数组,const char*因为您要为其分配字符串文字(不可变)。

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

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

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