这个一个关于两个爪子的问题 ‘’’’’
话题引出
我跟随翁凯教授的c语言进阶教程完成strcpy函数的创建,s1和s2字符串都使用了字符串指针创建
char *s1="hell";
char *s2="world";
但在赋值环节出现了内存访问报错的问题
代码如下
void mystrcat(char *s1,char *s2){
int i1=0;
while (s1[i1]!='\0')
{
i1++;
}
int i2=0;
while (s2[i2]!='\0')
{
s1[i1]=s2[i2];
i1++;
i2++;
}
s1[i1]='\0';
}
调试发现是在
**s1[i1]=s2[i2]**这里报错,查询资料后得知
C语言中,凡是以""括住的形式直接出现,而且你又没有为其分配内存空间的字符串都是常量字符串,是不能修改其值的。
什么意思?我给你翻译翻译
就是我们使用 char *s1=“hello” 创建s1字符串的时候,是在操作系统中随机一个地方把hello这个东西当做 常量来定义,然后把地址交给s1,注意这里"hello"是常量,常量你还想怎么改
而另一种方式创建字符串后使用同一段代码却正常
char s1[]="hello";
char s2[]="world";
Why?
char s1[]=“hello”;
这样赋值的就是一个字符数组。s1[]是使用了数组的方式,在内存中开辟了指定的内存空间来存放这个字符串
tip:
1.数组的变量名=a[0]的地址
2.指针也可以创建字符串,也可以当数组使用,当要注意这是一个
只读常量