字符串正在添加特殊字符

时间:2014-03-21 23:46:38

标签: c arrays string

我开始关注C上的教程,然后我(从头开始)尝试做一个程序,程序选择一个单词而你必须猜字母,直到你发现单词或用完了尝试。

但我被困在弦乐部分,真的很奇怪:

srand(time(NULL));
char pWord[6][15] = {"chocolate","peanut","bowling","helicopter","school","controller"}; // Possible words
int repeat=0;
int rNum = rand()%6;
char solution[strlen(pWord[rNum])];
while(repeat<strlen(pWord[rNum])) {
    solution[repeat]=pWord[rNum][repeat];repeat++;  
}
printf("Answer : %s", solution); printf("\n");
printf("R Answer : %s", pWord[rNum]); printf("\n");
printf("R length : %i", strlen(pWord[rNum])); printf("\n");
strcpy(solution,pWord[rNum]);

对于保龄球来说这很好,但对于其他人来说,随意添加奇怪的特殊字符 我不知道为什么会这样(我来自java,懒惰和容易的地方)。

1 个答案:

答案 0 :(得分:1)

在C中,字符串以空字符'\0'结尾。因此,当您声明字符串solution时,您需要在char数组的长度上添加一个,因为strlen()函数不计算结尾处的空字符。

char solution[strlen(pWord[rNum])+1];

然后在while循环之后,您需要将'\0'分配给char数组的最后一个元素:

while(repeat<strlen(pWord[rNum])) {
    solution[repeat]=pWord[rNum][repeat];
    repeat++;  
}
solution[repeat]='\0';

更好的方法是使用strcpy()函数代替while循环:

strcpy(solution, pWord[rNum]);

这样您就不必将空字符分配给最后一个字符。这个功能适合你。

相关问题