c语言中字符串的之间的复制与连接,memcpy和strcat的简单使用。

前几篇文章提到过最近在搞一个使用udp通信的电源控制程序。

自动化测试的时候需要不停的上电和断电,每次上电要设置电流电压输出通道的信息。

所以我找到了一个在程序开始输入设置好相关信息后,会一直循环使用该信息的方法。

即声明一个指针函数和一个全局变量,在main中对函数和全局变量初始化,然后返回时return全局变量。

再将函数赋值给一个指针,然后将指针带入到无限循环内的相应的电流电压设置的子函数内即可。


现在说正事。

在编辑指令程序的时,有些设置指令需要在设置的数值之前加上相关的命令符。

如设置电压时 完整指令为 VOLT x.xxxx \n。如何只用输入一个float就能自动将其复制到相应的指令位置呢?

需要的函数有 fgets()、memcpy()、strcat()。

1、用fgets()录入需要的电压值及换行符;

原函数:char *fgets(char *buf, int bufsize, FILE *stream)

之前的文章有提到过,一般指令的末尾需要一个换行符来提示指令结束,scanf()的输入无法满足换行符输入,所以我一般都用fgets()来录入。忘说了,使用fgets时要注意,你所能够输入的字节数是你申请的储存空间的大小-1。即buff[16]所能输入的字节数是16-1=15个字节,因为如之前说的,字符串要以‘\0’为结束符。

fgets(v,sizeof(v)-1,stdin);


2、用memcpy将相关命令符先复制到buff缓冲区;

原函数:void *memcpy(void*dest, const void *src, size_t n);

相比于strcpy(),strcpy()遇到’\0‘结束符的时停止复制。而memcpy()不会,它会一直复制指定字节才结束。基本上memcpy的使用范围比较广。

memcpy(buff,“VOLT ”,6);


3、使用strcat将两个字符串无空格连接。

原函数:extern char *strcat(char *dest,char *src);

重点就是这个了,之前一直找将一个字符串添加到另个字符串后面相关的方法,看了很多方法都麻烦,如for循环赋值啊之类的。

相比与其他,这个函数真的是个救星,若想将字符串a、b连接起来成一个字符串,只需要strcat(a,c);就行了,而且a与c之间还没后空格。要注意的是a的空间一定要能容得下两个字符串,否则会溢出。

strcat(buff,v);


最后打印buff时,打印的结果是

VOLT ×.××××\n


#include

#include

int main()

{

char v[8];

char buff[16];

fgets(v,7,stdin);

memcpy(buff,“VOLT ”,6);

strcat(buff,v);

printf("%s\n",buff);

return 0;

}



你可能感兴趣的:(tcp/udp)