繁体   English   中英

字符串添加特殊字符

[英]String is adding special characters

我开始学习有关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,有点懒惰和容易)。

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

这样,您不必将空字符分配给最后一个字符。 此功能为您完成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM