为什么我不能在char数组中保存字符串?

时间:2014-10-26 18:11:18

标签: c arrays

//pick() returns a random word.
char* randomWord = pick(); //save random word in randomWord var
int length = strlen(randomWord); //get length of the randomWord
char HiddenRandomWord[length];
char* stringHiddenRandomWord = HiddenRandomWord;

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

printf("%s", stringHiddenRandomWord);

我只想保存在一个数组中:_ _ _ _ _ //every letter is one low bar

如果随机字的长度为7,则输出为:_______ // 7次_

但是,如果我moidfy HiddenRandomWord[i] = ' _'; //注意到在低位之前添加的空格,输出保持为_______,它只取最后一个字符。

我知道,当它有简单的引号时,它只适用于一个字符,对于双引号,它适用于多个字符。我已经把所有的方法都转移了,但是我没有得到它。

2 个答案:

答案 0 :(得分:0)

这一行

char HiddenRandomWord[length];

应该是

char HiddenRandomWord[length+1];

这也意味着这句话是在数组之外写的

if (i == length) HiddenRandomWord[i] = '\0';

所以你的循环应该是

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

其次是

HiddenRandomWord[i] = 0 ;

答案 1 :(得分:0)

你需要以这种方式使用memset()函数,并且你没有使用stringHiddenRandomword:

char* randomWord = pick();
char* HiddenRandomWord = malloc(strlen(randomWord) + 1);
if (HiddenRandomWord == NULL) perror("malloc");
memset(HiddenRandomWord, '_', strlen(randomWord)); 

printf("%s//%d\n", HiddenRandomWord, strlen(hiddenRandomWord);

这应该可以解决问题。