我写了这段代码,作为一种前瞻性。
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 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
时自己进行匹配。