Искал похожий ответ, но ничего, что я пытаюсь, работает.
Есть проблема, я хочу изменить значение 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;
}
Строки не назначаются в C.
Вам нужно использовать strcpy()
или же memcpy()
скопировать строку
strcpy(word,randWord);
Обратите внимание на предупреждения компилятора.
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, вы не можете копировать строки, присваивая.
Вот два разных способа исправить это:
проходить init(word)
и вниз в init
сказать strcpy(word, randWord)
,
+ Изменить word
в const char *word
, продолжайте звонить init(&word)
изменить определение init
в void init(const char ** word)
и оставьте задание *word = randWord
, (В этом случае вы должны объявить words[]
а также randWord
как const char *
, также.)