在C/Reading中向前看



我写了这段代码,作为一种前瞻性。

int main() {
    char a[100];
    char b[100];
    scanf("%s", a);
    if (a[0] == '@') {
        scanf("{%s}", b);
    }
    printf("%sn", b);
}

由于某种原因,我第一次按回车后出现段错误,我的输入是@hi。这是怎么呢

您的第一段代码(在编辑之前)的问题是,您正在创建一个存储2个字符的字符串。'0'和NULL。然后尝试用scanf中的4个字符覆盖它。

在第二段代码中,您没有将char指针指向的任何位置。你只是声明了它而没有给它一个值,所以它可以指向任何东西。

要获得你想要的行为,你需要创建一个像这样的字符数组:

char a[100];
char b[100];

你必须使数组足够大以满足你的目的。

同样,如果你想读入这两个字符串,你将不得不"消耗"它们之间的空白。为此,将第二个scanf更改为:

scanf(" {%s}", b);

注意{前面的空格

scanf("%s", a);,根据手册页,试图将字符串(%s)存储在格式(a)之后的指针参数所指向的位置。在这种情况下,a是未初始化的,不指向任何存储空间。要读取单个字符,请考虑以下示例:

int main(int argc, char **argv)
{
    char c;

    /* among other things, read a character */
    scanf("%c", &c);
    return 0;
}

展开它以获得预期的行为。此外,我建议你避开scanf,并在阅读fgets时自己进行匹配。

相关内容

  • 没有找到相关文章

最新更新