C 语言输入的一个坑
原题如下:
题目描述
不借用任何字符串库函数实现无冗余地接受两个字符串,然后把它们无冗余的连接起来。
输入描述:
- 每一行包括两个字符串,长度不超过100。
输出描述:
- 可能有多组测试数据,对于每组数据,不借用任何字符串库函数实现无冗余地接受两个字符串,然后把它们无冗余的连接起来。
- 输出连接后的字符串。
这是个很简单的题,但是有一个坑。
通常我们 C 语言存放字符串要么是用字符数组要么是用指针,我第一反应就是用指针来存储,所以我写了如下代码:
char *a, *b;
scanf("%s %s", a, b);
但是当输入一行的时候会出现段错误。
这是因为 a b 都是未初始化的指针,如果打印二者的地址可以发现它们是相邻的
0x7ffee27a5610 0x7ffee27a5608
所以当你接受两个字符串的时候就很可能会出现段错误了。
使用长度固定的字符数组就能完美避免这个问题了。
char a[105], b[105];
scanf("%s %s", a, b);