C 语言输入的一个坑

Author Avatar
Patrick 3月 01, 2019

原题如下:

题目描述
不借用任何字符串库函数实现无冗余地接受两个字符串,然后把它们无冗余的连接起来。

输入描述:

  • 每一行包括两个字符串,长度不超过100。

输出描述:

  • 可能有多组测试数据,对于每组数据,不借用任何字符串库函数实现无冗余地接受两个字符串,然后把它们无冗余的连接起来。
  • 输出连接后的字符串。

这是个很简单的题,但是有一个坑。

通常我们 C 语言存放字符串要么是用字符数组要么是用指针,我第一反应就是用指针来存储,所以我写了如下代码:

1
2
char *a, *b;
scanf("%s %s", a, b);

但是当输入一行的时候会出现段错误。

这是因为 a b 都是未初始化的指针,如果打印二者的地址可以发现它们是相邻的

0x7ffee27a5610 0x7ffee27a5608

所以当你接受两个字符串的时候就很可能会出现段错误了。

使用长度固定的字符数组就能完美避免这个问题了。

1
2
char a[105], b[105];
scanf("%s %s", a, b);