读书人

char指针有关问题

发布时间: 2012-04-01 17:23:46 作者: rapoo

char指针问题
为什么*s1 = *s2;不行啊?

int main(void)
{
char* s1 = "Hello, World!\0";
char* s2 = "abcdef\0";
printf(s1);
s1++;
s2++;
*s1 = *s2;
printf(s1);
return 0;
}

[解决办法]
(1)
char* s1 = "Hello, World!\0";
char* s2 = "abcdef\0";
"Hello, World!\0",和"abcdef\0"存储在常量数据区,是只读的,所以*s1 = *s2,是不对的
(2)
char str1[] = "Hello, World!\0";
char str2[] = "abcdef\0";
"Hello, World!\0",和"abcdef\0"存储在常量数据区,是只读的,但是其在数组str1,str2中都存在有一个副本,
但是需要注意 str1,str2,指向各自数组首元素的地址,是个常量,所以str1++,str2++也是错误的
(3)
char str1[] = "Hello, World!\0";
char str2[] = "abcdef\0";
但是可以定义 两个指针变量 char* p1=str1;char* p2=str2; 这时候 p1,p2都是指针变量,且所指向的内容是可读写的,这样 *p1++=*p2++;才正确

读书人网 >C语言

热点推荐