写在前面的一点小感想
刷题刷了几天了,发现自己在字符串这一块很薄弱,所以把这一块不熟悉的地方都记下来……
题目描述
写一函数,使输入的一个字符串按反序存放,在主函数中输入输出反序后的字符串。
输入一行字符
输出逆序后的字符串
错误思路
声明一个足够大的字符数组,然后一直输入字符直到输入回车符。再根据循环次数反向循环输出字符。
OJ提示的错误是Runtime Error:Segmentation fault,解释是Segmentation fault:段错误,检查是否有数组越界,指针异常,访问到不应该访问的内存区域。问题出在我一开始就限定了字符数组的长度,当输入的字符串长度超过限定长度时就会出错。
正确解法
直接使用gets()读取完整的字符串,再根据字符串的长度循环输出
代码
#include<stdio.h>
#include<string.h>
int main()
{
char a[1000];
int i, len;
gets(a);
len = strlen(a);
for(i = len - 1; i >= 0; i--)
{
printf("%c", a[i]);
}
return 0;
}
小贴士
(怕自己忘记)gets()跟scanf()的区别在于当字符为空格时scanf会默认停止输入;puts()跟printf()的区别在于puts输出完毕后会自动回车。