strcpy(a ## _p, #b)问题

来源:百度知道 编辑:UC知道 时间:2024/07/06 00:12:00
一个C语言面试题
#define STRCPY(a, b) strcpy(a ## _p, #b)
int main()
{
char var1_p[20];
char var2_p[30];

strcpy(var1_p, "aaaa");
strcpy(var2_p, "bbbb");

STRCPY(var1, var2);
STRCPY(var2, var1);

printf("var1 = %s\n", var1_p);
printf("var2 = %s\n", var2_p);

return 0;
}

输出:var1 = var2
var2 = var1
不知道是怎么回事,这个宏定义:#define STRCPY(a, b) strcpy(a ## _p, #b)是什么意思,怎么会有个##出来,请知道的高手帮忙解答一下

两个##意思就是将##两端的字符串拼接起来,一个#表示那个位置用宏参数作为字符串代替,是strcpy(a##_p,#b)表示strycpy的第一个参数是由宏参数a后拼接上_p构成,宏参数b变成字符串作为第二个参数,STRCPY(var1, var2)展开就变成strcpy(var1_p,"var2")

STRCPY(var1, var2); == strcpy(var1_p, "var2");

#b说明之间把b当作字符串输入,而不是b变量
a##_p说明把a当作字符串并且后面紧跟字符串_p作为整个字符串