lvaluerequireasincrementoperand
1 #include<stdio.h>
2 #include<stdlib.h>
3int main()
4 {
5char source[]="hello";          //创建⼀个字符串数组值为“hello”
6char* des =(char*)malloc(5*sizeof(char));  //初始化⼀个长度为5的空的字符串数组
7
8for(int i=0;i<5;i++)      //通过for循环将source中的元素拷贝到des中
9    {
10        *des++=*source++;
11    }
12
13    printf("%s",des);
14return0;
15 }
结果:
编译器报错:lvalue require as increment operand (错误在第10⾏)
⾃⼰的理解:
  原来在这⾥如果要使⽤ *des++ 或者 *source++ 那么 des 或 source 就需要是个能进⾏加⼀操作的指针也就是地址,然⽽在上⾯的代码中
des 和 source 并不是个地址⽽是两个字符串数组;
  那么按照这个想法,改变⼀下,先定义两个指针 char* c 和 char* k 分别指向两个字符串数组的⾸地址,然后再对这两个指针进⾏增加加操作
1 #include<stdio.h>
2 #include<stdlib.h>
3int main()
4 {
5char source[]="hello";
6char* des =(char*)malloc(5*sizeof(char));
7
8char* c = des;
9char* k = source;
strcpy报错
10for(int i=0;i<5;i++)
11    {
12        *c++=*k++;
13    }
14    printf("%s",des);
15return0;
16 }
结果:
编译成功⽆报错,并得到了预期的结果
补充:
字符串拷贝的典型实现:
1char *strcpy(char *des, char * source) //des 为⽬标字符串数组,source为源数组
2 {
3char* r = des;
4/*
5        assert 来⾃于c标准库<assert.h>,表⽰如果括号中的表达式为false则终⽌程序执⾏
6为true不做任何操作
7*/
8    assert((des != NULL)&&(source != NULL));
9while((*r++ = *source++)!='\0');
10return des;
11 }

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。