该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
程序:
/*整体移动字符串,空位以'\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',不知道问题出在哪里?高手指点