【C语言】sprintf和strcat的用法

sprintf()

sprintf 是个变参函数,定义如下:

int sprintf( char *buffer, const char *format [, argument] ... );

sprintf函数的功能是它把结果输出到指定的字符串中.

sprintf的第一个参数是目的字符串,

因为C语言在进行字符串操作时不检查字符串的空间是否够大,所以可能会出现数组越界而导致程序崩溃的问题。

即使碰巧,程序没有出错,也不要这么用,因为早晚会出错。所以一定要在调用sprintf之前分配足够大的空间给buf。

把整数123 打印成一个字符串保存在s 中。

sprintf(s, "%d", 123); //产生"123"

也可以按照16 进制打印:

sprintf(s, "%8x", 4567); //小写16 进制,宽度占8 个位置,右对齐

sprintf(s, "%-8X", 4568); //大写16 进制,宽度占8 个位置,左对齐

strcat()

C语言 strcat() 函数用来将两个字符串连接(拼接)起来。

头文件:string.h

语法/原型:

char*strcat(char* strDestination, const char* strSource);

参数说明:

  • strDestination:目的字符串;
  • strSource:源字符串。
strcat(t,p)
char *t = new char[100];
strcpy(t,"hello ");
char *p= "word!zhuan";
strcat(t,p);
printf("%s\n",t);
delete [] t;
输出hello Word!

strcmp() 

原型:int strcmp(const char *s1, const char *s2);

头文件:#include <string.h>

功能:用来比较两个字符串

参数:s1、s2为两个进行比较的字符串

返回值:若s1、s2字符串相等,则返回零;若s1大于s2,则返回大于零的数;否则,则返回小于零的数。

说明:strcmp()函数是根据ACSII码的值来比较两个字符串的;strcmp()函数首先将s1字符串的第一个字符值减去s2第一个字符,若差值为零则继续比较下去;若差值不为零,则返回差值。

strcpy()

C语言 strcpy() 函数用于对字符串进行复制(拷贝)。

头文件:string.h

语法/原型:

char* strcpy(char* strDestination, const char* strSource);

参数说明:

  • strDestination:目的字符串。
  • strSource:源字符串。

strcpy() 会把 strSource 指向的字符串复制到 strDestination。

必须保证 strDestination 足够大,能够容纳下 strSource,否则会导致溢出错误。

返回值:目的字符串,也即 strDestination。

if(ucEdfaPumpSetMode==0)strcpy(strSet,"APC");
		else if(ucEdfaPumpSetMode==1)strcpy(strSet,"ACC");
		else strcpy(strSet,"");	 
		strcat((char*)strCmd,strSet);//值
		strcat((char*)strCmd,"\r\n");	//\r\n结束符
		SendCmdType = CMD_SET_PUMP_MODE_TYPE;

a declaration cannot have a label

C语言中标签的下一条语句不能是定义变量的表达式,而case恰好就是标签,所以说出现这种情况也是比较正常的。知道了原因之后那么解决方法就多了,我可以在switch前就定义这个变量。

u8 gbkStr[20] = {0xD9, 0xC1, 0xE7, 0xBD, 0xD9, 0xCB, 0xC8, 0xB6, 0}; //临界速度\
switch(parameter)
{
    case ALARM_NEAR_MAXSPEED:  
    GUI_DrawString(190, 48, strlen((char *)gbkStr) * 8, 16, MiddleLeft, gbkStr);
    break;
}

或者在case后加入复合语句:

switch(parameter)
{
    case ALARM_NEAR_MAXSPEED:  
    {
    u8 gbkStr[20] = {0xD9, 0xC1, 0xE7, 0xBD, 0xD9, 0xCB, 0xC8, 0xB6, 0}; //临界速度
    GUI_DrawString(190, 48, strlen((char *)gbkStr) * 8, 16, MiddleLeft, gbkStr);
    break;
    }
}

又或者是在case XXX后加一个分号:

switch(parameter)
{
case ALARM_NEAR_MAXSPEED:  
;
    u8 gbkStr[20] = {0xD9, 0xC1, 0xE7, 0xBD, 0xD9, 0xCB, 0xC8, 0xB6, 0}; //临界速度
    GUI_DrawString(190, 48, strlen((char *)gbkStr) * 8, 16, MiddleLeft, gbkStr);
    break;
}

rand()函数

rand() 返baidu一个随机整zhi数
rand()%10 返daozhuan0~9之间的随机shu整数
rand()%10/10.0 返回0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9之中的随机数答

前面是整形相除,只取整数部分,舍去余数。
10/4=2
后面是浮点型除整形,实际按浮点型来算,不舍去余数。
10.0/4=2.5

CODE = (1<<7) | (0<<6) | (1<<5) | (0xf)

1<<7就是把1按位左移7位。0000 0001 左移7位变成 1000 0000
0<<6 0按位左移6位 还是 0000 0000
1<<5 是 0010 0000
0xf 2进制表示为 0000 1111
然后把这四个数字进行或运算得 1010 1111 即CODE 的值

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

米杰的声音

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值