【问题标题】:Pick randomly string from array in C从C中的数组中随机选择字符串
【发布时间】:2014-10-25 19:09:23
【问题描述】:
void pick() {
    char* words[2];
    words[0] = "blah";
    words[1] = "hmm";

    char random;
    srand(time(NULL));
    random = words[rand() % 2];
    printf(random);
    return;
}

这是我的代码,我想从单词数组中随机选择一个单词,但是当我运行它时,编译器会说:[警告] assignment make integer from pointer without a cast [enabled by default]

【问题讨论】:

    标签: c arrays random


    【解决方案1】:

    您已将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. 传统上使用% 获取特定范围内的随机数并不是很好。另请参阅 comp.lang.c 常见问题解答中的 Q13.16 How can I get random integers in a certain range? 。

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

    【讨论】:

    • 我已经尝试过了,但我不知道为什么我在使用 char* random 时出现此错误:c:\program files (x86)\dev-cpp\mingw32\mingw32\bin\ld.exe cannot open输出文件 C:\Users.... 权限被拒绝
    • 这是一个不同的问题,它是一个 linking 问题而不是编译问题。完整的错误信息是什么?它试图打开哪个文件?听起来ld 正在尝试写入您已经打开的文件。您是否尝试在它已经运行时进行构建?
    猜你喜欢
    • 2017-01-12
    • 1970-01-01
    • 2020-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-04
    • 2020-02-04
    • 1970-01-01
    相关资源
    最近更新 更多