#include<stdio.h>
#include<stdlib.h>
int main()
{
char source[]="hello"; //创建一个字符串数组值为“hello”
char* des =(char*)malloc(*sizeof(char)); //初始化一个长度为5的空的字符串数组 for(int i=;i<;i++) //通过for循环将source中的元素拷贝到des中
{
*des++=*source++;
} printf("%s",des);
return ;
}

结果:

编译器报错:lvalue require as increment operand (错误在第10行)

自己的理解:

  原来 在这里如果要使用 *des++ 或者 *source++ 那么 des 或 source 就需要是个能进行加一操作的指针也就是地址,然而在上面的代码中

des 和 source 并不是个地址 而是两个字符串数组;

  那么按照这个想法,改变一下,先定义两个 指针 char* c 和 char* k 分别指向两个字符串数组的首地址,然后再对 这两个指针进行增加加操作

 #include<stdio.h>
#include<stdlib.h>
int main()
{
char source[]="hello";
char* des =(char*)malloc(*sizeof(char)); char* c = des;
char* k = source;
for(int i=;i<;i++)
{
*c++=*k++;
}
printf("%s",des);
return ;
}

结果:

编译成功无报错,并得到了预期的结果

补充:

字符串拷贝的典型实现:

 char *strcpy(char *des, char * source) //des 为目标字符串数组,source为源数组
{
char* r = des;
/*
assert 来自于c标准库<assert.h>,表示如果括号中的表达式为false则终止程序执行
为true不做任何操作
*/
assert((des != NULL)&&(source != NULL));
while((*r++ = *source++)!='\0');
return des;
}

lvalue require as increment operand的更多相关文章

  1. c数组与指针

    0.数组和指针并不是相同的 我们声明数组时,同时分配了一些内存空间,用于容纳数组元素,但是当我们声明一个指针时,只分配了用于容纳指针本身的内存空间. 从这个方面也可以理解sizeof后面跟数组名和指针 ...

  2. 没做过编译器就是被人欺——从一道变态的i++题猜编译器的行为(表达式从左往右扫描,同一变量相互影响)

    首先不要被人蒙了,如果是这样,根本编译不过: int i=1; int b=i+++++i; printf("%d %d\n", b ,i); Mingw报错:error: lva ...

  3. 数组字符串与指针字符串的区别 char s[]="***" 和char *s="***"的区别

    char s[] = "wangshihui"; char *s = "wangshihui"; 皆宣告了s字符串,在C-style string的函数皆可使用 ...

  4. 剖析C语言中a=a+++++a的无聊问题

    同僚们闲聊,突然就聊到了a+++++a的问题.这种纯属C语言 “二” 级的问题应该是从a+++a引申出来的吧.于是乎兄弟姐妹们开始讨论它的运算结果,以及改如何理解.更有人写出(a++)+(++a) a ...

  5. C语言左值,运算符的优先级以及结合性探讨

    刚刚开始看一本书.<C陷阱与缺陷>,相信学习C语言的大家都对这本书有耳闻.今天看到了里面的贪心法则.也即在读到一个字符后,尽可能多的读入更多的字符,直到读入的字符组成的字符串已经不可能再组 ...

  6. c语言在windows下和Mac下的不同表现!

    最近给一个等级考试的C语言培训班上课,学生问起一些++的问题.让我好生为难.因为这些不同的编译器处理方式,在不同的系统下表现并不一致. 不管你洋洋洒洒论述多么一大篇,在事实面前就一下显得苍白了.虽然这 ...

  7. C语言++a与a++的实现机制与操作符结合优先级

    看到一道"经典Linux C"面试题,关于左值和右值的. 华为笔试题 1.写出推断ABCD四个表达式的是否正确, 若正确, 写出经过表达式中 a的值(3分) int a = 4; ...

  8. C笔记-左值与右值

    目录 前言:工欲善其事,必先利其器 两种资料 参考资料及其使用说明 官方对于左值和右值的定义 实际使用时的疑问 左值的涵盖范围 重要概念: 左值转化(lvalue conversion) 左值与指针 ...

  9. 理解C++ lvalue与rvalue

    一个众所周知的危险错误是,函数返回了一个局部变量的指针或引用.一旦函数栈被销毁,这个指针就成为了野指针,导致未定义行为.而左值(lvalue)和右值(rvalue)的概念,本质上,是理解“程序员可以放 ...

随机推荐

  1. windows下使用gvim不支持python3.6问题解决

    在用户目录下C:\Users\Administrator\新建vim配置文件夹vimfiles,然后该文件下建立一个文件vimrc vimrc内容: set pythonthreedll=python ...

  2. Deep Learning framework --- MexNet 安装,测试,以及相关问题总结

    Deep Learning framework --- MexNet 安装,测试,以及相关问题总结  一.安装:   参考博文:http://www.open-open.com/lib/view/op ...

  3. ZOJ 3987 Numbers(Java枚举)

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3987 题意:给出一个数n,现在要将它分为m个数,这m个数相加起来必须等于n ...

  4. [luogu]P1852跳跳棋

    题目重点是每次不能跳过两个棋子 即对于每一个棋子的状态(a,b,c) (a<b<c) 最多有两种移动的方式 1.中间往两边跳 (a,b,c)-->(2b-a,a,c)或(a,c,2b ...

  5. C++中substr函数的用法

    #include<iostream> #include<string> using namespace std; int main(){ string str("12 ...

  6. idea关于热部署插件JRebel的使用教程

    1. idea安装JRebel热部署插件 在1处输入jrebel然后在3处点击install安装按钮就可以了,安装好以后如下图: 2. 激活JRebel help -> JRebel -> ...

  7. mvc报错:403.14-Forbidden Web 服务器被配置为不列出此目录的内容

    有两个地方需要配置: 1.web.config中的节点: <system.webServer> <validation validateIntegratedModeConfigura ...

  8. Web阶段总结以及感受(附带大一结束暑期学习的纲要)

    之前本人大一因为不是计算机专业的,而又喜欢计算机,所以在大一临时转专业到了计算机院(费劲一番波折),冷笑,还好,从大二开始就可以正式学习喜欢的软件了. 首先,前两天看到一个讲座,提到学习方法,并说出总 ...

  9. leecode第十六题(最接近的三数之和)

    class Solution { public: void quick_order(vector<int>& num, int star, int en)//快排 { int st ...

  10. 《剑指offer》第五十三题(0到n-1中缺失的数字)

    // 面试题53(二):0到n-1中缺失的数字 // 题目:一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字 // 都在范围0到n-1之内.在范围0到n-1的n个数字中有且只有一个数 ...