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)是什么意思,怎么会有个##出来,请知道的高手帮忙解答一下
#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作为整个字符串