lvalue require as increment operand
#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的更多相关文章
- c数组与指针
0.数组和指针并不是相同的 我们声明数组时,同时分配了一些内存空间,用于容纳数组元素,但是当我们声明一个指针时,只分配了用于容纳指针本身的内存空间. 从这个方面也可以理解sizeof后面跟数组名和指针 ...
- 没做过编译器就是被人欺——从一道变态的i++题猜编译器的行为(表达式从左往右扫描,同一变量相互影响)
首先不要被人蒙了,如果是这样,根本编译不过: int i=1; int b=i+++++i; printf("%d %d\n", b ,i); Mingw报错:error: lva ...
- 数组字符串与指针字符串的区别 char s[]="***" 和char *s="***"的区别
char s[] = "wangshihui"; char *s = "wangshihui"; 皆宣告了s字符串,在C-style string的函数皆可使用 ...
- 剖析C语言中a=a+++++a的无聊问题
同僚们闲聊,突然就聊到了a+++++a的问题.这种纯属C语言 “二” 级的问题应该是从a+++a引申出来的吧.于是乎兄弟姐妹们开始讨论它的运算结果,以及改如何理解.更有人写出(a++)+(++a) a ...
- C语言左值,运算符的优先级以及结合性探讨
刚刚开始看一本书.<C陷阱与缺陷>,相信学习C语言的大家都对这本书有耳闻.今天看到了里面的贪心法则.也即在读到一个字符后,尽可能多的读入更多的字符,直到读入的字符组成的字符串已经不可能再组 ...
- c语言在windows下和Mac下的不同表现!
最近给一个等级考试的C语言培训班上课,学生问起一些++的问题.让我好生为难.因为这些不同的编译器处理方式,在不同的系统下表现并不一致. 不管你洋洋洒洒论述多么一大篇,在事实面前就一下显得苍白了.虽然这 ...
- C语言++a与a++的实现机制与操作符结合优先级
看到一道"经典Linux C"面试题,关于左值和右值的. 华为笔试题 1.写出推断ABCD四个表达式的是否正确, 若正确, 写出经过表达式中 a的值(3分) int a = 4; ...
- C笔记-左值与右值
目录 前言:工欲善其事,必先利其器 两种资料 参考资料及其使用说明 官方对于左值和右值的定义 实际使用时的疑问 左值的涵盖范围 重要概念: 左值转化(lvalue conversion) 左值与指针 ...
- 理解C++ lvalue与rvalue
一个众所周知的危险错误是,函数返回了一个局部变量的指针或引用.一旦函数栈被销毁,这个指针就成为了野指针,导致未定义行为.而左值(lvalue)和右值(rvalue)的概念,本质上,是理解“程序员可以放 ...
随机推荐
- Configuring Logstash
Configuring Logstash To configure Logstash, you create a config file that specifies which plugins yo ...
- 深度学习课程笔记(九)VAE 相关推导和应用
深度学习课程笔记(九)VAE 相关推导和应用 2018-07-10 22:18:03 Reference: 1. TensorFlow code: https://jmetzen.github.io/ ...
- 一文读懂 深度强化学习算法 A3C (Actor-Critic Algorithm)
一文读懂 深度强化学习算法 A3C (Actor-Critic Algorithm) 2017-12-25 16:29:19 对于 A3C 算法感觉自己总是一知半解,现将其梳理一下,记录在此,也 ...
- kubernetes 实战3_命令_Configure Pods and Containers
Configure a Pod to Use a PersistentVolume for Storage how to configure a Pod to use a PersistentVolu ...
- HDU 1241 Oil Deposits(石油储藏)
HDU 1241 Oil Deposits(石油储藏) 00 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Probl ...
- 1、iptables-netfilter基础
.iptables: 包过滤型防火墙功能.四表五链 .iptables规则.规则管理工具.iptables命令 .iptables链管理.规则管理.查看等 .iptables匹配条件.目标.显式扩展. ...
- HDU 5754 Life Winner Bo(各类博弈大杂合)
http://acm.hdu.edu.cn/showproblem.php?pid=5754 题意: 给一个国际象棋的棋盘,起点为(1,1),终点为(n,m),现在每个棋子只能往右下方走,并且有4种不 ...
- springboot整合druid数据库连接池并开启监控
简介 Druid是一个关系型数据库连接池,它是阿里巴巴的一个开源项目.Druid支持所有JDBC兼容的数据库,包括Oracle.MySQL.Derby.PostgreSQL.SQL Server.H2 ...
- centos7 安装nexus3
一.安装前先安装好java JDK 和maven nexus 下载 链接:https://pan.baidu.com/s/1qQBNj2soc8Un4AoRejvEyw 密码: sb12 1.下载好后 ...
- Ubuntu 下 Python自由切换
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100 sudo update-alternati ...