关于i++和++i 的一点小问题

二胖小哥 2014-04-22 04:47:26
#include<iostream>


char *left(const char *ps,int n=1);
int main()
{
using namespace std;
cout<<"输入字符串:";
char ps[100];
cin.get(ps,100);
char *pt=left(ps,3);
cout<<pt<<endl;
delete[] pt;
pt=left(ps);
cout<<pt<<endl;
delete[] pt;


system("pause");
return 0;
}


char *left(const char *ps,int n)
{
using namespace std;

char *p=new char[n+1];
int i;
for(i=0;i<n&&ps[i];i++)
{
p[i]=ps[i];
}
while (i<=n)
{
p[i++]='\0'; //这个地方是i先进行运算,然后在加一,这已经是最后一个了,不明白为什么要再加1呢?
}


return p;
}
...全文
145 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
二胖小哥 2014-04-23
  • 打赏
  • 举报
回复
引用 2 楼 lianshaohua 的回复:
p[i++]='\0'; //这个地方是i先进行运算,然后在加一,这已经是最后一个了,不明白为什么要再加1呢? 字符串最后需要有结束符0,当是第一个元素时,i++是有必要的,当是最后一个元素时,先将最后一个元素设置为0,然后不再加1,为了代码统一
可是如果这个地方不加1 我试过了 结果出不来的啊
逆水寒_ 2014-04-22
  • 打赏
  • 举报
回复
同意2L 的看法, 为了代码统一。。
二胖小哥 2014-04-22
  • 打赏
  • 举报
回复
引用 1 楼 shenchenman 的回复:
字符串最后有个0
在for循环的时候,i最后是等于n的,对于数组,是从ps【0】开始的,而这个地方ps[n]已经是字符串后面的后一位了,也就是\0的位置,而此时赋值是对的,可是i++是先运算再加1,也就是赋值结束后又加了1,指针移到的后一位,这是为什?
kuankuan_qiao 2014-04-22
  • 打赏
  • 举报
回复
引用 楼主 erpng 的回复:
#include<iostream> char *left(const char *ps,int n=1); int main() { using namespace std; cout<<"输入字符串:"; char ps[100]; cin.get(ps,100); char *pt=left(ps,3); cout<<pt<<endl; delete[] pt; pt=left(ps); cout<<pt<<endl; delete[] pt; system("pause"); return 0; } char *left(const char *ps,int n) { using namespace std; char *p=new char[n+1]; int i; for(i=0;i<n&&ps[i];i++) { p[i]=ps[i]; } while (i<=n) { p[i++]='\0'; //这个地方是i先进行运算,然后在加一,这已经是最后一个了,不明白为什么要再加1呢? } return p; }
你说的啥意思
ztenv 版主 2014-04-22
  • 打赏
  • 举报
回复
p[i++]='\0'; //这个地方是i先进行运算,然后在加一,这已经是最后一个了,不明白为什么要再加1呢? 字符串最后需要有结束符0,当是第一个元素时,i++是有必要的,当是最后一个元素时,先将最后一个元素设置为0,然后不再加1,为了代码统一
shenchenman 2014-04-22
  • 打赏
  • 举报
回复
字符串最后有个0

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧