1.字符数组与字符串
2、常量区
每一个exe使用内存的时候,是把内存分成不同的区域的
数据区包括全局变量和常量区。
出现0xC0000005表示的意思是访问错误。,一般对内存做了非法读写的时候,就会出现这个错误。
1、哪个可以修改?哪个不能改?
经实验发现*(x+1)='A’出现访问错误提示。说明不能改*(x+1)的值
后面我又在上面的条件下,加了一行代码
发现编译没有出错,说明x的值是可以改的,是x指向的那个字符串“china自己"本身不能改
那为什么不能让我们改呢?
因为x指向那个字符串存储在常量区。
那为什么y[1]能改呢?
因为数组y在全局区。
2、哪个可以修改?哪个不能改?
可以发现y数组已经把常量区的字符串拷贝了一份到堆栈了。
所以*(x+1 )=‘A’会失败;
y[1]='A’会成功;
3、常见字符串操作
// 1.判断字符串的长度的函数
int strlen (char * s)
{
int ret =0;
while(*s !=0)
{
ret++;
s++;
}
return ret;
}
//2、char* strcpy (char* dest, char* src);
复制字符串src到dest中。返回指针为dest的值。
char * strcpy (char * dest,char *src)
{ char * ret =dest;
while((*dest++) =(*src++));
return ret;
}
//3、char* strcat (char* dest, char* src);
将字符串src添加到dest尾部。返回指针为dest的值。
char* stract (char* dest, char* src)
{
char* ret=dest;
while(*dest !=0)
{
dest++;
}
while((*dest++) = (*src++));
return ret;
}
//4、int strcmp ( char* s1, char* s2);
一样返回0 不一样返回1
int strcmp(char* s1, char* s2)
{
while(*s1 != ‘\0’ && *s2 != ‘\0’)
{
if(*s1 != *s2)
{
return 1;
}
s1++;
s2++;
if(*s1 == ‘\0’ && *s2 == ‘\0’)
{
return 0;
}
else
{
return 1;
}
}
}