Вы объявили 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*
.
Использование %
для получения случайных чисел в определенном диапазоне традиционно не очень хорошо. Также см. Q13.16 How can I get random integers in a certain range? из часто задаваемых вопросов по comp.lang.c.
printf(random)
является опасным. Если строка, которую вы печатаете, включает в себя %
символов, то printf
будет ошибочной (и это потенциально может быть уязвимостью безопасности). Вы всегда должны предпочесть printf("%s", random)
. И поскольку вам, вероятно, нужна конечная новая линия, она должна быть printf("%s\n", random)
или просто puts(random)
.
я уже пробовал это, но я не знаю, почему я получаю эту ошибку с гольца * случайным образом: C: \ Program Files (x86) \ Dev-CPP \ mingw32 \ mingw32 \ Bin \ ld.exe \t не может открыть выходной файл C: \ Users .... Permission denied – Sergio
Это другая проблема, и это проблема * linking *, а не проблема компиляции. Каково полное сообщение об ошибке? Какой файл он пытается открыть? Похоже, что 'ld' пытается записать файл, который у вас уже открыт. Вы пытаетесь построить, пока он уже запущен? – jamesdlin
большое спасибо, это мне помогло :) – Sergio