-1

已经寻找了类似的答案,但我没有尝试任何工作。有一个问题,我想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;
}
4

3 回答 3

3

字符串在 C 中是不可赋值的。

您需要使用strcpy()memcpy()复制字符串

strcpy(word,randWord);
于 2015-07-03T03:05:06.610 回答
2

注意编译器警告。

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 所说,您不能通过分配来复制字符串。

于 2015-07-03T03:26:42.823 回答
1

以下是解决此问题的两种不同方法:

  1. init(word)了,下来init再说strcpy(word, randWord)

  2. 更改wordconst char *word,继续调用init(&word),更改为的定义initvoid init(const char ** word)并离开分配*word = randWord。(在这种情况下,您也应该将words[]and声明randWordconst char *。)

于 2015-07-03T03:29:14.190 回答