2014-10-26 79 views
0
//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为什么我不能在char数组中保存一个字符串?

如果随机字的长度,例如,是7,输出将是:_______ // 7倍_

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

我知道,当它有简单的引号时,它只用于一个字符,双引号用于多个字符。我有很多方法,我不明白。

+0

我们不知道'pick'是什么或做什么。你可能想使用[strcpy(3)](http://man7.org/linux/man-pages/man3/strcpy.3.html)或者[snprintf(3)](http://man7.org /linux/man-pages/man3/snprintf.3.html),你应该阅读一本关于C编程的好书。不要忘记编译所有的警告和调试信息('gcc -Wall -Wextra -g')和**使用调试器**(''gdb') – 2014-10-26 18:13:14

+0

''_''既不是有效的C字符串你认为它的方式,也不是一个字符 - 你不能像那样复制它。 – Leeor 2014-10-26 18:15:29

+0

pick()只是从数组中获得一个随机单词并返回它 – Sergio 2014-10-26 18:15:41

回答

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 ; 
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); 

这应该做的伎俩。

+0

你不理解它。如果随机单词是例如,你好,输出必须是_ _ _ _ _ // 5 _因为你有5个字母 – Sergio 2014-10-26 18:34:39

+0

请参阅我的编辑,对你更好吗?@ user3525362 – Mekap 2014-10-26 18:36:09

相关问题