strcpy的一个问题,还一个问题是关于宏的副作用的

redoffice redoffice 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
题1:编写一个函数,作用是把一个char组成的字符串循环右移n个。比如原来是“abcdefghi”如果n=2,移位后应该是“hiabcdefgh”
  函数头是这样的:
//pStr是指向以'\0'结尾的字符串的指针
//steps是要求移动的n
#define MAX_LEN 30

void LoopMove ( char * pStr, int steps )
{
 //请填充...
}
  解答:
  正确解答1:
void LoopMove ( char *pStr, int steps )
{
 int n = strlen( pStr ) - steps;
 char tmp[MAX_LEN];
 strcpy ( tmp, pStr + n );
 strcpy ( tmp + steps, pStr);
 *( tmp + strlen ( pStr ) ) = '\0';
 strcpy( pStr, tmp );
/*
char tmp1[MAX_LEN];
strcpy( tmp1, tmp );
*/
}

main()
{
LoopMove("whatshallido", 3 );
}

在所给的正确解答中,strcpy( pStr, tmp );这句在我调试的时候是会出问题的。不知道为什么会出问题?
如果写成注释里的模样的话,则不出问题。这是什么问题呢?是因此参数是常量的问题吗?还是怎么的?


看了好多帖子上都有这个例子,宏的副作用

防止宏的副作用。

  宏定义#define MIN(A,B) ((A) <= (B) ? (A) : (B))对MIN(*p++, b)的作用结果是:

((*p++) <= (b) ? (*p++) : (*p++))

  这个表达式会产生副作用,指针p会作三次++自增操作。

不理解这里宏展开为什么会是这个样子?是所有我看到的帖子都有问题?还是我什么地方没理解?我认为应该是((*p++) <= (b) ? (*p++) : (b))这个样子啊,而且自增的次数不一定的啊。。。
请大侠们讲解
谢谢

...全文

相关推荐

评论 10
收藏 已收藏
分享
返回顶部
redoffice
C++ 语言 65,214 成员 250,514 内容