c - 为什么 C 向我的 char 数组添加奇怪的字符?

标签 c character

我正在开发一个刽子手项目,正如您在我的代码中看到的,在某些情况下它会向我的字符串添加一些奇怪的字符。并非总是如此,但大多数时候都是如此。 (例如:鼠标 => 鼠标@ 由于我无法进行字符串比较,而且它也很难看。有什么解决办法吗?

#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!") ;
  }
}

最佳答案

strlen(animals[choose]) 字符串中不包含“\0”NUL 终止字符,因此在创建结果时需要在长度上加一。您还需要像这样将结果设为 null;

char result[length+1];
result[length] = '\0';

关于c - 为什么 C 向我的 char 数组添加奇怪的字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43621216/

相关文章:

c - 数组中最小的两个整数和

c - 用于循环速度 c 的英特尔编译器

c - 如何使用 C 中的字符数组进行函数调用

asp.net - 字 rune 字中的字符太多?

ios - 每当 UITextView 更改时,如何从空的 attributedString 开始?

c - 纯C : trim all characters in a string after a word occurs

c - 减去链表元素时的段错误

c - 在C中使用幂函数

c - 将单个字符追加到 C 中的动态字符数组

c - 从 scanf 获取字符串的长度