为什么C会在我的字符数组中添加奇怪的字符?

为什么C会在我的字符数组中添加奇怪的字符?,c,character,C,Character,我正在做一个刽子手项目,正如你在我的代码中看到的,在某些情况下,它会在我的字符串中添加一些奇怪的字符。不总是,但大多数时候。(例如:鼠标=>鼠标@ 因为我不能做字符串比较,而且也很难看。有什么解决办法吗 #include <stdio.h> #include <string.h> #include <ctype.h> #include <stdlib.h> char animals [8][20] = {"LION" ,"GIRAFFE","OC

我正在做一个刽子手项目,正如你在我的代码中看到的,在某些情况下,它会在我的字符串中添加一些奇怪的字符。不总是,但大多数时候。(例如:鼠标=>鼠标@ 因为我不能做字符串比较,而且也很难看。有什么解决办法吗

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>

char animals [8][20] = {"LION" ,"GIRAFFE","OCTOPUS", "RHINOCEROS","CENTIPEDE",  "ELEPHANT", "MOUSE", "DOG"};
int i ;

int main() {
    srand(time(0));
    int choose;
    choose = rand()% 7;
    int length;
    printf("%s", animals[choose]);
    length = strlen(animals[choose]);
    char result[length];

    for(i=0; i< length;i++) {
        result[i] = '_' ;
    }

  printf("%s", result);

  while(1) {
    printf("\nEnter guess char!:  ") ;
    char guess ;
    scanf(" %c", &guess) ;
    guess = toupper(guess) ;
    hangman(guess, result, animals[choose], length ) ;
  }

  return 0;
}

void hangman (char guess, char result[], char word[], int length ){
    for(i=0; i< length; i++) {
        if(guess == word[i]) {
            result[i] = guess ;
    }
  }

  printf("%s", result) ;

  if(strcmp(result, word)== 0 ){
    printf("gratulation!") ;
  }
}
#包括
#包括
#包括
#包括
动物[8][20]={“狮子”、“长颈鹿”、“章鱼”、“犀牛”、“蜈蚣”、“大象”、“老鼠”、“狗”};
int i;
int main(){
srand(时间(0));
int选择;
选择=rand()%7;
整数长度;
printf(“%s”,动物[选择];
长度=strlen(动物[选择]);
字符结果[长度];
对于(i=0;i

首先,我想你是说

choose = rand() % 8;
                 ^^^
因为数组动物声明为

char animals [8][20] = /*...*/;
             ^^^
此调用中使用了此格式说明符
“%s”

printf("%s", result) ;
设计用于输出以零结尾的字符串。但是字符数组
结果
不包含字符串

你可以写

char result[length + 1] ;
for(i=0; i < length;i++) {
result[i] = '_' ;
}
result[i] = '\0';
char结果[长度+1];
对于(i=0;i
@BLUEPIXY我刚刚意识到。我不习惯使用它们。顺便说一句,程序的第一行有未定义的行为。缩进/间距错误。请修复。