C 字符指针分配随机字符

C 字符指针分配随机字符,c,C,我正在为这个类编写一个小C代码,这个类用一个已经输入的名字来扮演刽子手。有一节要求我允许输出输入短语,所有字母都用*代替,但不允许标点符号。类似地,在短语的末尾,将用户名放在括号中,并按原样打印。代码的第一部分工作正常,第一个while循环放置星号,但第二个while循环似乎每次都失败,并且似乎每次程序运行时都存储无意义和随机字符。这是我到目前为止的节目 #include <stdio.h> #include <stdlib.h> int main() { in

我正在为这个类编写一个小C代码,这个类用一个已经输入的名字来扮演刽子手。有一节要求我允许输出输入短语,所有字母都用*代替,但不允许标点符号。类似地,在短语的末尾,将用户名放在括号中,并按原样打印。代码的第一部分工作正常,第一个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++;
    }
}

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

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

还可能需要包括ctype.h


祝项目的其余部分好运。

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

正如其他人在注释中指出的那样,您也不能以null结尾字符串。您最好先复制字符串(使用
strncpy
),然后根据需要使用
*
标记字符。这意味着您只有一个循环,它会简单得多:

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

另外,
NULL
是一个指针。空终止是一个不幸的名称。你可以写的值<代码> 0 > /代码> 0 \ '/COD>,但是不是代码> null < /C> > < /P>你没有在你的字符串中设置一个结束标记(<代码> > 0代码>或<代码> 0代码> >代码……你是否使用C++编译器编译你的C代码?“指向整数的指针比较”如果不是,则应将
*qoop
与“\0”进行比较,而不是与NULL进行比较。第一个循环没有测试“\0”字符。如果文本不包含任何
字符您可能会遇到未分配的内存区域。大家好,我也在这方面工作,但现在最关心的是随机字符插入。有什么想法吗?我对代码做了一点修改,使它看起来有点马虎,但我不再得到随机字符。代码为:int计数器=0;while(qoop!='\0'){if(*qoop='.| | |*qoop='!'.| |*qoop='?'.| |计数器==1){counter=1;}如果(isalpha(*qoop)){if(counter==0){*strP='.}如果(counter==1){*strP=*qoop;}其他{*strP=*qoop;}printf(“%c”,*strP);strP++;qoop++;}
strncpy( strArr, quote, sizeof(strArr) );
for( char *s = strArr; !strchr(".!?", *s); s++ )
{
    if( isalpha(*s) ) *s = '*';
}