C, указатели и пустые функции

Искал похожий ответ, но ничего, что я пытаюсь, работает.
Есть проблема, я хочу изменить значение word вызывая функцию void init() но когда я печатаю слово, оно не работает.

Потратил много часов на это, поэтому любая помощь будет оценена.

int main(void)
{
char word[MAX_WORD_LEN + 1];
unsigned wrongGuesses = 0;
int guessedLetters[ALPHABET_SIZE] = {
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
};
init(&word);
printf("%s", word);
displayWord(word, guessedLetters);
guessLetter(word, guessedLetters);
return EXIT_SUCCESS;
}

void init(char* word)
{
int randValue;
char* randWord;
const char* words[NUM_WORDS] = {
"array",      "auto",       "break",      "case",       "cast",
"character",  "comment",    "compiler",   "constant",   "continue",
"default",    "double",     "dynamic",    "else",       "enum",
"expression", "extern",     "file",       "float",      "function",
"goto",       "heap",       "identifier", "library",    "linker",
"long",       "macro",      "operand",    "operator",   "pointer",
"prototype",  "recursion",  "register",   "return",     "short",
"signed",     "sizeof",     "stack",      "statement",  "static",
"string",     "struct",     "switch",     "typedef",    "union",
"unsigned",   "variable",   "void",       "volatile",   "while"};
int seed;
seed = (time(NULL));
srand(seed);
randValue = rand() % NUM_WORDS;
randWord = words[randValue];
printf("%s", randWord);
*word = randWord;
}

-1

Решение

Строки не назначаются в C.

Вам нужно использовать strcpy() или же memcpy() скопировать строку

strcpy(word,randWord);
3

Другие решения

Обратите внимание на предупреждения компилятора.

word.c: At top level:
word.c:16:6: warning: conflicting types for ‘init’
void init(char* word)
^
word.c:8:4: note: previous implicit declaration of ‘init’ was here
init(&word);

Вы передаете указатель на указатель на init ().

И да, как сказал @Gopi, вы не можете копировать строки, присваивая.

2

Вот два разных способа исправить это:

  1. проходить init(word)и вниз в init сказать strcpy(word, randWord),

  2. + Изменить word в const char *word, продолжайте звонить init(&word)изменить определение init в void init(const char ** word)и оставьте задание *word = randWord, (В этом случае вы должны объявить words[] а также randWord как const char *, также.)

1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector