c语言字符串移位包含,c 语言 输入一个字符串 循环右移 n个 得到一个新的字符串...

满意答案

dcebd7a0de6265b6ccae5ead692f1eab.png

vidsos14

推荐于 2016.09.12

dcebd7a0de6265b6ccae5ead692f1eab.png

采纳率:45%    等级:11

已帮助:40433人

有问题找代码:char s2[] ={0};

这里相当于s2是1个字符的数组。当对它做类似strcpy(s2,s1);的操作时,只要s1的长度(这里是n)大于1,就会出现数组访问越界。对于像数组访问越界这种错误会引发的结果是不确定性,有可能程序正常运行,也可能会崩溃,取决于越界之后访问到的内存地址的相关属性。

将s2改一个动态数组,程序就能正常运行。代码如下:

#include

#include

#include

void LoopMove(char *s,int n)

{

char *s1;

int t1=strlen(s);

int t =strlen(s)-n;

char* s2 = (char*)malloc((t1 + 1) * sizeof(char)); //分配t1+1个字符的空间,之所以加1是因为C中字符串默认以'\0'结尾,strlen的结果是没包含这个'\0'的。

memset(s2, 0, t1 + 1); // 清空s2的内容

s1=s+t;

printf("%d\n",t);

strcpy(s2,s1);

strncpy(s2+n,s,t);

strcpy(s,s2);

free(s2); // 释放资源

}

int main()

{

int n=4;

char s[] ="hello";

char *p= NULL;

LoopMove(s,n);

printf("%s\n",s);

}

00分享举报

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值