作者:WXP(翱翔云端的鸟) 联系方式:328452854@qq.com (联系请注明) 申明:个人原创,转载请先经过本人同意! 要说的话:个人水平有限,写之前也看过许多大神的博客,不足之处,还请指正!有疑问欢迎大家联系我交流探讨!
环境:VS2017 C/C++ code 从键盘输入一个字符串,实现逆序操作。 看到这个的第一反应想想应该很简单,但是在写的过程中却碰到很多问题,很是头疼
错误示范1:
char *input = NULL; printf("Please Input a string:"); scanf("%s",input); 错误示范2:
char *input = ""; printf("Please Input a string:"); scanf("%s",input);这两种错误都是在输入字符串之后回车就报异常了
错误示范1:这里试图去写地址0(NULL),这个地址是操作系统不允许写入的,所以报错
错误示范2:这里input指向的是空字符串,空字符串是保存在只读空间的,对只读空间写入从而异常
两者还有一个共同的问题,这里虽然定义了字符指针变量input,但是并没有给它分配空间然后直接去写
正确的示范:
char *input = NULL; input = (char *)malloc(100); printf("Please Input a string:"); fgets(input,100,stdin); 当然也可以直接使用一个字符数组,与malloc一样都是为其分配空间
注意这里使用的fgets,而不是用的scanf,原因是scanf作输入时,要是中间输入了空格,它会以为字符串结束,空格后的字符作为下一个输入处理了,而fgets不会,此函数用作从文件中读入字符串,也可以从屏幕录入
函数定义:fgets(char *s, int size,FILE *stream)
用来从所指的文件中读入字符到指针s指向的空间,直到出现换行字符,或者是读到文件结束(size-1)个字符当从屏幕录入时,第三个参数使用 stdin
完整的示例:
#include <stdio.h> #include <string.h> #include <malloc.h> void swap(char *p, char *q) { char temp = *p; *p = *q; *q = temp; } int main(void) { int i; char *input = NULL; input = (char *)malloc(100); printf("Please Input a string:"); fgets(input,100,stdin); int len = strlen(input);//求字符串长度 len = len - 1; //去掉回车 printf("strlen = %d\n", len); printf("%s\n", input); for (i = 0; i < len / 2; i++) { swap(&input[i], &input[len - i]); } printf("%s\n",input); while(1); }上述代码在VS2017上验证过了,即使包含空格字符也能够逆转字符串