C语言,将数字和字符串拼成一个字符串。用宏来做,用api谁都会!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言,将数字和字符串拼成一个字符串。用宏来做,用api谁都会!相关的知识,希望对你有一定的参考价值。

宏定义字符串拼接可以使用宏运算##,即 #define strcat(x,y) x##y。

##运算符可以将两个记号(例如标识符)“粘”在一起,成为一个记号。如果其中一个操作数是宏参数,“粘合”会在当形式参数被相应的实际参数替换后发生。考虑下面的宏:

#define MK_ID(n) i##n

下面的声明使用MK_ID创建了3个标识符:

int MK_ID(1), MK_ID(2), MK_ID(3);

预处理后声明变为:

int i1, i2, i3;

例如:

#include <stdio.h>
#define strcat(x,y) x##y
int main()

    int strcat(i,1),strcat(i,2);
    i1=10,i2=20;
    printf("%d %d",i1,i2);
    return 0;

/*运行结果:
10 20
*/
参考技术A 宏定义有两种运算符,#和##
#运算符将一个宏参数转换成为字符常量
eg: #define PRINT_INT(x) printf(#x " = %d\n",x);
##运算符将两个标识符“粘”在一起,成为一个标识符
eg: #define MK_ID(N) x##n <==> MK_ID(1) = x1

然后你把这两个宏结合起来,就达到你的目的了,而且可以很灵活的随意使用
下面是一种可能例子,你可以根据需要修改
#define HAHA(x,y) (#x##y)
x代表你要输入的数字,y代表字符串追问

#define haha(s,n) (#s##n)
int id = 1 ;
printf("%s\n",haha("name_",id)) ;
这样为什么不对呢

快点帮忙阿!!!急死了。拜托了

本回答被提问者采纳

c语言中对较大数字的处理?

用C语言实现将一个大数转化为科学计数法的形式,基数存储到一个变量,指数存储到另一个变量,从而进行运算(之前看过将大数用数组来存储,但我觉得这还是对大数的位数限制很大,有没有更好的方法?)

大数处理一般就两种方式,一种是整型的方式,保存绝对准确值 在不出现溢出时,运算结果完全准确。当范围超过最大整型范围时,就需要用数组了
另外一种就是浮点数的方式,通过保存底数和指数的方式,以一定精度表示近似值。
也就是说,如果要绝对准确,那就必须占用更多空间
快速大数可以参考gnu的gmp库
参考技术A 因为编译器定义了某种类型占用的空间,例如int占用4字节,unsigned char占用1字节,既然空间是有限的,那么表示数字的范围肯定也是有限的,例如unsigned char的范围就是0~255。

如果想处理超出类型定义范围的数怎么办呢,只能自己用代码实现了,大概思路就是增加空间来存储大数,然后使用专门的函数来实现大数的加减乘除等基本运算。

参考openssl源码中bignum部分,代码在crypto\bn目录下
参考技术B c语言对整形的处理 如果数值过大会变成一个垃圾值
浮点数的存储不准确
参考技术C 不错他们说的都很对。

以上是关于C语言,将数字和字符串拼成一个字符串。用宏来做,用api谁都会!的主要内容,如果未能解决你的问题,请参考以下文章

C语言中如何将2个结构体拼成一个包

有没有办法用宏来计数?

Java 获取类名,函数名,行数

用C语言递归法将一个整数化为字符串

C语言:编写一个函数change,要求它能将一个整数字符串转换成一个整数。(用实参与形参来做)

C语言中如何将一个数字的各个位上的数分别提取?