第一次发表博文,写得好不好请大家见谅。
这篇博文主要想讲一下最近遇到的有关字符串的问题。
我在练习指针的时候遇到这样一个问题,要求将一个字符串中间的某些部分删去,比如"abcdefghigk"删去中间几个字符以后变成"abcdigk",必须使用指针而不是数组。这看起来是一个很简单的问题,可是在写出代码以后却遇到一个问题,编译器通过了,但是运行却出现了0XC0000005的错误,说指针指向的位置写入时发生访问冲突。也就是无法进行修改。
然后在调试的过程中发现了问题所在行。简单点说,问题就是这句语句:*p = *q;
这句话看似没有错误,所以我就各种百度、google,查找有关字符串和指针的知识,最后终于得出了结果。下面就将结果展示给大家。
(1)字符串指针是一个指向常量的指针,也就是说,如果定义为char *p="ddddddd";那么*p就不能够进行赋值操作了。即再有一条*p = "d";那么就会产生以上的错误。
(2)为了避免这种错误,在定义和初始化的时候只能这样: char p[] = "ddddddd",这样定义的是一个字符数组,数组名p可以是一个指针,它指向字符串的第一个字符。这样就可以对字符串进行赋值或者其他改变值的操作了。
(3)这是为什么呢,原因在于,指向字符串的指针指向的是一个常量,常量是存储在静态内存区,而变量是存储在动态内存区。p[]是一个字符数组变量,存放字符串。而*p=“ddd”中的"ddd"是一个常量字符串,存放在静态内存区,故而不可以被修改。
然后,我还有一个问题,就是有时候在写程序时,并不知道所需要输入的字符串的大小,所以想是否可以利用指针,然后可以使:
char *p;
cin>>p;
这样来输入不限多的字符,显然这样做是不可以的。其实也不是显然,我试验了好多种方法都不行。最后得到的结果是:
(1)只能够定义一个大的数组,这样是一个比较浪费空间的方法。
char p[1000];
(2)还可以再输入前,先输入一个需要输入的大小,然后动态申请这么多的内存。
char p[];
int n;
cin>>n;
p=new char(n);
cin>>p;
(3)如果不这样做的话,还有一种比较麻烦的方法,就是使用链表,动态的进行。这样可以输入不限多字符。但显然会浪费很多效率。
第一次写。请大家多多指正,互相交流。
相关推荐
9.1 1分钟彻底理解指针的概念 9.2 大话C语言指针变量 9.3 C语言指针变量的运算 9.4 数组指针(指向数组的指针) 9.5 字符串指针(指向字符串的
字符串逆序+c语言字符串逆序输出+c语言字符串逆序逐行解释字符串逆序+c语言字符串逆序输出+c语言字符串逆序逐行解释字符串逆序+c语言字符串逆序输出+c语言字符串逆序逐行解释字符串逆序+c语言字符串逆序输出+c语言...
C语言字符串函数大全C语言字符串函数大全C语言字符串函数大全C语言字符串函数大全
纯C语言实现字符串拆分操作,把字符串拆分成字符串数组,然后再输出。 使用sstream方法,作为底层驱动操作实现非常方便。
C语言字符串替换函数strrpl支持中文汉字,解决含中文汉字,可能替换错误的情况。支持GBK、GB18030字符串。
C语言字符串操作大全C语言字符串操作大全C语言字符串操作大全
c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针...
C语言字符串函数大全C语言字符串函数大全C语言字符串函数大全C语言字符串函数大全C语言字符串函数大全C语言字符串函数大全C语言字符串函数大全C语言字符串函数大全C语言字符串函数大全C语言字符串函数大全C语言字符...
主要介绍了C语言字符串转换为Python字符串的方法,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
总结的一些笔试过程中的C语言练习题,虽然不会再出现原题但是可以学习学习其中的思想。万变不离其宗。资源主要是关系笔试部分的字符串专项练习。
几个字符串处理函数增强版 常用需求基本都能完成 已经编译成DLL 函数列表 兼容字符和串 void revstr char str 字符串反转 int substring char res int pos int len char substr 从pos开始取len个字符到substr中 ...
C语言字符串操作函数.docx
C语言大作业,实现基本字符串编辑,void listinput(char *s);//字符串输入 void listoutput(char *s);//字符串输出 int listlenth(char *s);//求串长 void linklist(char *s,char *t);//串连接 int listcompare(char...
C语言用指针将字符串数组位置颠倒,实现ABCDEFGHIJKLMNOPQRSTUVWXYZ转换成ZYXWVUTSRQPONNOPQRSTUVWXYZ
自己写的字符串截取,很灵活,很好用。你也可以自己修改。
c语言字符串个函数操作大全 函数名: stpcpy 功 能: 拷贝一个字符串到另一个 函数名: strcat 功 能: 字符串拼接函数 用 法: char *strcat(char *destin, char *source); 函数名: strchr 功 能: 在一个串中...
本文档在某知名网站下载,要么浏览量最多,要么最新,保证精品,至少为你节约3RMB。格式为caj或者kdh需要专业阅读器打开。
各种C语言字符串函数,笔试面试过程中经常被问到的题目
c语言字符串交换,使用指针实现, 希望多多相互理解 学习