该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
程序:
/*整体移动字符串,空位以'\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++ = *( p + n );
while ( p <&#61; p_max )
*p&#43;&#43; &#61; 0;
}
else
clean( p, LEN );//将所有字节清零&#xff0c;测试正常&#xff0c;西边的clean也正常
}
else if ( n <0) // 右移。
{
if (( LEN - 1 &#43; n ) > 0) //判定 -LEN&#43;1 {
p &#61; p_max; //从后向前赋值
while ( p > p_n_r)
*p-- &#61; *( p - n ); //所有字节右移n
while ( p >&#61; p_0 )
*p-- &#61; 0;//空位用零补齐
}
else
clean( p, LEN );
}
return 0;
}
问题&#xff1a;这是为一个程序写的一个函数&#xff0c;目的是将一个数组&#xff0c;如char test[20](自定义‘E&#39; 为结束符&#xff0c;整体左移或者右移&#xff0c;空位以零补齐。但是结束符&#39;E&#39;的位置保持不变)
编译环境&#xff1a;VC6&#43;&#43;
当n>&#61;0,n<&#61;-LEN时均可以正常运行&#xff0c;但是-LEN&#43;1