求大神解救

剑啸六合 2012-11-15 11:37:32
我想把这串字符串 全部左移三位 希望得到效果 位defgabc 不知为何 编译正确 执行的时候出现问题
int main(int argc, char* argv[])
{
char *str1="abcdefg";
int i=0;
while(i<6){
*str1++=*(str1 + 3);
i++;
}
return 0;
}
...全文
186 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
longburulin 2012-11-16
  • 打赏
  • 举报
回复
引用 5 楼 gohay1 的回复:
引用 3 楼 longburulin 的回复: int main(int argc, char* argv[]) { char *str1="abcdefg"; int i=0; while(i<6){ *str1++=*(str1 + 3); i++; } return 0; } 第一是字符串常量 不能改变内容 第二 虽然不算越界 但没有意义 修改 ……
菜鸟写代码 泄漏一点哈 没什么问题吧
gohay1 2012-11-16
  • 打赏
  • 举报
回复
引用 3 楼 longburulin 的回复:
int main(int argc, char* argv[]) { char *str1="abcdefg"; int i=0; while(i<6){ *str1++=*(str1 + 3); i++; } return 0; } 第一是字符串常量 不能改变内容 第二 虽然不算越界 但没有意义 修改 C/C++ code?……
内存泄漏啦
兆帅 2012-11-16
  • 打赏
  • 举报
回复
引用 1 楼 gzshun 的回复:
1.内存操作有误 2.实现逻辑也有问题 char *str1="abcdefg";是只读的,字符串保存常量区,不可更改。 改为: char str1[]="abcdefg"; char *p = str1; ...
转角天边 2012-11-16
  • 打赏
  • 举报
回复
引用 2 楼 xiaoqin515515 的回复:
这里有好几个问题 1。char *str1="abcdefg";是一个指针指向一个只读的字符串,是不能对其内容进行修改*str = **;之类的操作都是错的,改成数组 char str[] = "abcdefg" 2. *str1++=*(str1 + 3); 对有副作用的++,一个变量一般不要在同一语句中出现两次, 自加另写一行。而不同变量就可以用,例如常用的 *dest++ = *src+……
++++
longburulin 2012-11-16
  • 打赏
  • 举报
回复
引用 9 楼 cxy510521 的回复:
引用 3 楼 longburulin 的回复: int main(int argc, char* argv[]) { char *str1="abcdefg"; int i=0; while(i<6){ *str1++=*(str1 + 3); i++; } return 0; } 第一是字符串常量 不能改变内容 第二 虽然不算越界 但没有意义 修改 ……
你好 不可以的 前面的3位就已经修改不存在了 这个 如果看不出来就麻烦你自己动手试试
剑啸六合 2012-11-16
  • 打赏
  • 举报
回复
引用 3 楼 longburulin 的回复:
int main(int argc, char* argv[]) { char *str1="abcdefg"; int i=0; while(i<6){ *str1++=*(str1 + 3); i++; } return 0; } 第一是字符串常量 不能改变内容 第二 虽然不算越界 但没有意义 修改 C/C++ code?……
把p1=(char*)malloc(sizeof(strlen(str)+1)); 改为 p1=str 不占用堆内存是否也行的通?
sunfx 2012-11-16
  • 打赏
  • 举报
回复
2L的正解
longburulin 2012-11-15
  • 打赏
  • 举报
回复
int main(int argc, char* argv[]) { char *str1="abcdefg"; int i=0; while(i<6){ *str1++=*(str1 + 3); i++; } return 0; } 第一是字符串常量 不能改变内容 第二 虽然不算越界 但没有意义 修改
#include<iostream>
#include<stdio.h>
#include<string.h>
int main(int argc, char* argv[])
{
char str[8]="abcdefg";
char *p1,*p2;
p1=(char*)malloc(sizeof(strlen(str)+1));
p2=p1;
int i=3;
while(i<7)
{
   *p1++=str[i];
    i++;
}
i=0;
while(i<3)
{
    *p1++=str[i++];
}
*p1=0;
printf("%s",p2);
return 0;
} 
根据你的代码修改的
慧钦 2012-11-15
  • 打赏
  • 举报
回复
这里有好几个问题 1。char *str1="abcdefg";是一个指针指向一个只读的字符串,是不能对其内容进行修改*str = **;之类的操作都是错的,改成数组 char str[] = "abcdefg" 2. *str1++=*(str1 + 3); 对有副作用的++,一个变量一般不要在同一语句中出现两次, 自加另写一行。而不同变量就可以用,例如常用的 *dest++ = *src++ 3.你这个程序功能有越界访问的问题,即使改成上面的数组类型 *str1=*(str1 + 3);在+3会访越界区的内容,所以最后3个*str并不能正确赋值,后面3个元素是垃圾。 4.程序思想有点问题,功能不能实现,你前面3个字符会被覆盖,无法添加到最后面,你再好好想怎么实现。
gzshun 2012-11-15
  • 打赏
  • 举报
回复
1.内存操作有误 2.实现逻辑也有问题 char *str1="abcdefg";是只读的,字符串保存常量区,不可更改。 改为: char str1[]="abcdefg"; char *p = str1; ...

69,370

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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