字符串输入的陷阱
来源:互联网 发布:mysql 指定账户已存在 编辑:程序博客网 时间:2024/04/30 14:54
相关讲解详见《C语言程序设计实用教程(Applied C: An Introduction and More)》,[美]Alice E. Fischer, David W. Eggert等著,裘岚、张晓芸等译,电子工业出版社,2001年9月第1版,第362页至363页。
先看第一个程序:
#include "stdio.h"
typedef char* string;
void main()
{
string sz = "Hi, Unice!";
printf("Input:/n");
scanf("%s", sz);//这样做有风险,尝试修改字符串"Hi, Unice!"中的字符值!!!
//不能在指针中存储输入字符串!!!
printf("%s/n", sz);
}
该程序尝试用指针存储输入字符串,试图改变已有字符串"Hi, Unice!"中的字符值,会发生错误!如果字符指针sz没有被初始化,那么输入语句scanf("%s", sz)则试图改变未知地址的存储值,相当危险!
可用如下程序进行改进:
#include "stdio.h"
typedef char* string;
void main()
{
char ca[100];
printf("Input:/n");
scanf("%s", ca);
printf("%s/n", ca);
}
该程序用数组存储输入字符串,数组已分配内存空间,并可以向其中赋值。
也可以按如下程序改进:
#include "stdio.h"
typedef char* string;
void main()
{
char ca[100];
string sz = ca;
printf("Input:/n");
scanf("%s", sz);
printf("%s/n", sz);
}
该程序中,字符指针sz获取字符数组的首地址,可以存储输入的字符串。
- 字符串输入的陷阱
- 字符串输入的一些陷阱
- scanf的输入字符时的陷阱
- Java表达式的陷阱——关于字符串的陷阱
- C中字符串隐藏的陷阱
- ATL字符串转码的陷阱
- php双引号输出字符串的变量陷阱
- Java字符串split方法的小陷阱
- 关于oracle 字符串比较的一个陷阱
- 字符串函数sprintf / sprintf_s的陷阱
- 字符串常量作为模板参数的陷阱
- 小心stringstream.str()字符串用法的陷阱
- 字符串操作的一些陷阱,谨记!
- 字符串的输入注意
- 字符串的输入
- 字符串的输入
- 连接输入的字符串
- 字符串的输入问题
- 【软件】Dreamweaver cs4 破解安装方法
- 2.6.31内核编译处理3个错误 (redhat)
- 一个Linux爱好者的2.6.11内核编译过程
- the Secret DAILY TEACHINGS-Day 40
- the Secret DAILY TEACHINGS-Day 41
- 字符串输入的陷阱
- 多线程对窗体控件进行
- Log4j的配置及例子
- [转]SQl中的左连接,右连接,内连接,全连接,自连接的理解
- 线程学习
- JAVA 体系及其编程的过程
- Map容器的用法(STL)
- Symbian开发——Hello World
- [转]SQL语句的并集UNION,交集JOIN(内连接,外连接),交叉连接(CROSS JOIN笛卡尔积),差集(NOT IN)