我开始关注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,懒惰和容易的地方)。
答案 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]);
这样您就不必将空字符分配给最后一个字符。这个功能适合你。