数据结构作业复盘1:字符串疑难杂症小汇总(字符串赋值,指针数组...)

学校里开始上数据结构了,一开始是从C语言一些相关的基础开始讲起。第一次作业主要是字符串相关的基础知识以及编程题目。先做了一部分,整理了一下一些字符串隐含的知识和一些易误易混的概念,算是给自己的一个复盘和归纳。

strcpy函数相关

首先来看一下这段代码

char s[7]="abcdef",a[4]="ABC";

strcpy(s,a);

printf("%s,s);

 一开始的时候我以为会输出ABCdef,但是只输出了ABC。相信应该也会有人和我一样犯这种错误,本质上还是对strcpy本质不了解。本质上其实是把a的首地址复制到了s上,所以打印的时候自然不会把s的内容也给输出出来。

那我们不妨把a的长度变为9,变成ASDFGHJK(注意还有个\0),再进行复制后,输出的s竟然还是ASDFGHJK,这就说明了一个问题:复制地址的时候,目标字符串(前者s)的长度和原字符串(后者a)的长度并不会影响复制,即使前者的长度比后者短,依旧可完整的输出原字符串(a)。这体现了地址传递与值传递的差异所在。

同时,通过阅读《C Primer Plus》,我还了解到了strcpy函数另外的几个特点:

1.strcpy的返回值是char*类型,具体来说是其中第一个参数的地址,比如:strcpy(s+2,a);返回的就是s+2这个指针。

2.第一个参数不用指向目标字符串的首地址,就像上面的例子,可以使s+2,这样我们可以进行在数组的中部进行插入,值得注意的是,在中部插入之后,原来字符串的后半部分也是不会再有的了,全部都是新复制进来的字符串

3.strcpy函数如果要进行复制的话,其目标字符串指针必须指明地址,否则将指向一个不定的位置造成错误。

4.声明一个数组(char s[2])会自动为你分配内存,但是仅声明一个指针(char*s)不会给存储数据用的空间,仅仅会给一个存储地址的空间。

5.假如你是给字符串数组复制了一个常量字符串,那么后面你就不能在对他进行修改了。比如以下代码就会报错:

char sr[5];
strcpy(sr,"qwer");
sr="qq";

关于字符串,字符数组的赋值问题

来看下面的代码

char a[3];
char b[]="china";
a=b;
printf("%

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值