char指针分配随机字符

时间:2013-09-17 22:59:05

标签: c

我正在编写一个小型C代码,用于播放具有已输入名称的Hangman。一节要求我允许输入短语的输出带*代替所有字母,而不是标点符号。类似地,在短语的末尾,用户的名字放在括号中并且意图按原样打印。代码的第一部分工作正常,第一个while循环放置星号,但第二个while循环似乎每次都失败,似乎每次运行程序时都存储无意义和随机字符。这是我到目前为止的程序。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int guesses = 3;
    int limit = 41;
    char quote[42] = "I just wrote this game in C! (Josh Masher)";
    char strArr[42];
    char *quoP;
    quoP = &quote[0];
    char *strP;
    strP = &strArr[0];
    while (*quoP != '.' && *quoP != '!' && *quoP != '?') {
        if (isalpha(*quoP)) {
            *strP = '*';
           } else if (*quoP == ' ' || *quoP == ',') {
            *strP = *quoP;
           }
    strP++;
    quoP++;
    }
    while (*quoP != NULL) {
        *strP = *quoP;
        strP++;
        quoP++;
    }
}

任何想法?

修改

我稍微重写了代码,并删除了随机字符问题,但现在它更复杂了。

int main()
{
    int guesses = 3;
    int limit = 41;
    char quote[42] = "I just wrote this game in C! (Alex Butler)\0";
    char strArr[42];
    char *quoP;
    quoP = &quote[0];
    char *strP;
    strP = &strArr[0];
    int counter = 0;
    while (*quoP != '\0') {
        if (*quoP == '.' || *quoP == '!' || *quoP == '?' || counter == 1) {
            counter = 1;
        }

        if (isalpha(*quoP)) {
            if (counter == 0) {
                *strP = '*';
            } else if (counter == 1) {
                *strP = *quoP;
            }
           } else {
            *strP = *quoP;
           }
           printf("%c", *strP);
    strP++;
    quoP++;
    }
}

2 个答案:

答案 0 :(得分:1)

在最后一个while循环后添加* strP ='\ 0'以终止字符串。

另外,(* quoP!= NULL)应该是(* quoP!='\ 0')。 NULL的类型是指针,* quoP的类型是字符。你的程序仍然有效,但这会产生误导。

也可能想要包含ctype.h

祝你项目的其余部分好运。

答案 1 :(得分:0)

第一个循环不能正常工作。如果它遇到未处理的标点符号(例如&),它将跳过并在那里留下垃圾。

你也没有空字符串终止字符串,正如其他人在评论中指出的那样。您最好首先复制字符串(使用strncpy),然后在您认为合适时使用*标记字符。这意味着你只有一个循环,它会更简单:

strncpy( strArr, quote, sizeof(strArr) );
for( char *s = strArr; !strchr(".!?", *s); s++ )
{
    if( isalpha(*s) ) *s = '*';
}

此外,NULL是一个指针。空终止是一个不幸的名称。您可以写出值0'\0',但不能写NULL