c语言指针的循环,指针——while循环——高手看一下问题出在哪里?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

程序:

/*整体移动字符串,空位以'\0'补齐。左移为正,右移为负。

右移时,可以扩展直接舍去为四舍五入*/

// 规定'E'为字符串结束符

int move( char *p, int n )

{

char *p_0 = p;

char *p_max = p + LEN -2; //LEN 宏定义 字符串的长度,含有结束符'E'

char *p_n_r = p + n -1;

char *p_n_l = p + LEN - n - 1;

if ( n > 0 ) // 左移。左加右减。

{

if ( LEN -1 > n)

{

while ( p < p_n_l )

*p++ = *( p + n );

while ( p <= p_max   )

*p++ = 0;

}

else

clean( p, LEN );//将所有字节清零,测试正常,西边的clean也正常

}

else if ( n < 0)     // 右移。

{

if (( LEN - 1 + n ) > 0) //判定 -LEN+1 < n < 0

{

p = p_max; //从后向前赋值

while ( p > p_n_r)

*p-- = *( p - n ); //所有字节右移n

while ( p >= p_0 )

*p-- = 0;//空位用零补齐

}

else

clean( p, LEN );

}

return 0;

}

问题:这是为一个程序写的一个函数,目的是将一个数组,如char test[20](自定义‘E' 为结束符,整体左移或者右移,空位以零补齐。但是结束符'E'的位置保持不变)

编译环境:VC6++

当n>=0,n<=-LEN时均可以正常运行,但是-LEN+1 < n <0时,所有的字节均被赋值为'E',不知道问题出在哪里?高手指点

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值