满意答案
vidsos14
推荐于 2016.09.12
采纳率: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分享举报