读取不定长字符串
来源:互联网 发布:excel做数据分析好吗 编辑:程序博客网 时间:2024/06/06 03:17
C语言中通常使用scanf读取输入,但如果需要给一个char* 读取字符串,则需要使用malloc()预先分配空间,但是因为实现并不知道需要输入的字符串长度,所以可能因为分配的空间不足产生溢出。
读取单个字符使用getchar(),可通过它实现不定长字符串的输入。
1.何时结束循环输入
当输入时,按下回车键,输入缓冲区中除了字符串,还有一个换行符\n,因此当getchar()读到换行符时,就结束,但是字符串以\0结尾,因此需要额外加入结尾符。
2.存放问题
当使用scanf作为输入时,存放在char*中,需要使用malloc()分配空间,如果需要读入不定长字符串,则需要一个中间char*作为中转存储。
char* str1char* str2给其中一个分配空间,其中需要存储\0,同时需要一个变量记录输入字符个数。
int i=1;str=(char*)malloc(sizeof(char)*(i+1))将读取的字符存入
str[i-1]=getchar()每次输入一个字符,则变量i加一,同时str2分配空间,存放str1中的内容,释放str1,在申请空间,存放数据,并再次将str2的内容放回。
char* getstr(){ char* str1; char* str2; //str2作为中转存储使用 int i=1; str1=(char*)malloc(sizeof(char)*(i+1)); while('\n'!=(str[i-1]=getchar())) { i++; str2=(char*)malloc(strlen(str1)+1)); str1[i-1]='\0'; strcpy(str2,str1); free(str1); str1=(char*)malloc(sizeof(char)*(i+1)); if(NULL==str) //判断是否申请成功,失败需要释放内存 { free(str2); return NULL; } strcpy(str1,str2); free(str2); } str1[i-1]='\0'; //字符串结尾符 return str1;}
0 0
- 读取不定长字符串
- 不定长字符串输入处理小技巧
- 不定长字符串输入处理小技巧
- C++输入不定长字符串方法
- C++不定长字符串比较合理且简单的解决方法
- C++不定长字符串比较合理且简单的解决方法
- 不定长参数测试
- TVarRec不定长数组
- 不定长数组:vector
- 不定长参数
- java不定长参数
- 不定长顺序表
- Java不定长参数
- 不定长数组 vector
- 不定长参数
- 不定长数组vector
- Java不定长参数
- 不定长顺序栈
- 如何制作python安装模块(setup.py)
- #hiho1513 : 小Hi的烦恼 (bitset解决五维数点问题)
- 搜索引擎催生生态圈 影响网站排名基本因素
- 玩转gitHub之上传代码
- 机器学习 朴素贝叶斯
- 读取不定长字符串
- xrandr 常用命令 用于双显示器 切换屏幕
- Android WebView 因重定向无法正常goBack()的一种解决小方案
- sqlite jdbc 访问resource下的数据库
- 正则表达式
- Struts(9)Struts的文件上传和下载及UUID类的使用
- Longest Substring Without Repeating Characters
- Delphi XE 10 跨平台三层数据库应用教程
- Unity调试时oculus中无画面,Touch手柄无效