你知道如何用C语言将格式化数据和字符串相互转换吗?
Posted 努力学习游泳的鱼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了你知道如何用C语言将格式化数据和字符串相互转换吗?相关的知识,希望对你有一定的参考价值。
今天重点介绍2个函数,分别是sprintf和sscanf,用来将格式化数据和字符串相互转换。它们的作用分别是:
- sprintf函数用于将格式化数据转换成字符串。
- sscanf函数用于将字符串转换成格式化数据。
接下来是第一个大问题:我怎么记忆呢?这好容易记反呀!
别担心,我来教你。你也许不知道sprintf和sscanf,但你肯定知道printf和scanf。
- printf负责把格式化数据输出到屏幕上。sprintf和printf类似,只不过不是输出到屏幕上,而是输出到一个字符串中。把格式化数据输出到字符串中,不就是把格式化数据转换成字符串嘛。
- scanf负责从键盘中输入格式化数据。同理,sscanf和scanf类似,只不过不是从键盘中输入数据,而是从一个字符串中输入数据,也就是把字符串转换成格式化数据。
接下来讲解如何使用这两个函数。
1.sprintf
假设有这么一个结构体:
struct S
int i;
double d;
char arr[20];
;
我们创建了一个结构体变量:
struct S s = 10, 3.14, "abcdef";
此时,内存中就有了一份格式化数据。我们如何把这个格式化数据转换成字符串呢?
首先得有字符串存储的位置,C语言用字符数组来存储字符串:
char str[100] = 0;
接下来我们要干的事情,就是把s结构体中的数据转换成字符串,存储到str中,这就需要使用sprintf。
sprintf的声明如下:
int sprintf ( char * str, const char * format, ... );
其中str就是转换出来的字符串要存储到哪(一个char*的指针),后面的参数就跟printf是一样的了。在上面的例子中,应该这么使用:
sprintf(str, "%d %lf %s\\n", s.i, s.d, s.arr);
如果你还是不理解,可以这么想:下面的代码是什么意思?
printf("%d %lf %s\\n", s.i, s.d, s.arr);
就是把s中的内容打印到屏幕上嘛。那如果不是打印到屏幕上,而是“打印”到字符串中,就是sprintf的作用了。
如果你不相信,可以把str中的内容打印出来:
printf("%s\\n", str);
输出结果如下:
这说明转换成功了。
2.sscanf
假设我们已经有一个字符串了:
char str[] = "10 3.140000 abcdef\\n";
其实这个字符串和上面的例子中转换出来的字符串是一样的。
然后创建一个结构体:
struct S s = 0;
我们如何把这个字符串重新转换成结构体s呢?这就需要用到sscanf函数,声明如下:
int sscanf ( const char * s, const char * format, ...);
第一个参数就是你要转换的字符串,后面的参数和scanf一样。
这次,我换一种讲述方式,方便大家更好的理解。首先,假设我要你使用scanf函数来输入数据到结构体s中,你会怎么写?
scanf("%d %lf %s", &s.i, &s.d, s.arr);
注意,数组名本身就是地址,所以不需要取地址(&)。
scanf函数可以从键盘输入数据到结构体中去,那如果不从键盘中输入,而是从字符串输入呢?只需要使用sscanf,所有参数前面加上个str就行了。
sscanf(str, "%d %lf %s", &s.i, &s.d, &s.arr);
大功告成。你还可以把结构体中的数据打印出来:
printf("%d %lf %s\\n", s.i, s.d, s.arr);
输出结果和上面讲解sprintf函数时举的例子的输出是一样的。
总结
- sprintf和sscanf负责将字符串和格式化数据相互转换。
- sprintf相当于,本来是printf把格式化数据输出到屏幕上,现在是输出到一个字符串中,也就是把格式化数据转换成字符串。
- sscanf相当于,本来是scanf从键盘中输入格式化数据,现在是从一个字符串中输入,也就是把字符串转换成格式化数据。
- sprintf和sscanf的参数,与printf和scanf的参数的区别是,最前面多了个char*类型的指针,也就是指向字符串的指针。
感谢大家的阅读!
如何用C语言实现,读取两个文件数据,然后比较两个数据,如果有不同,转换类型并输出???
参考技术A 1、你先获取文件的数据,我给你一个事列://后面的是全路径,必须写对了
FILE *fp1 = fopen("/Users/qianwei/Desktop/2.txt","r" );
if (fp1!= NULL)
char a[50] ;
for (int i=0; i<num; i++)
fgets(a, 50, fp1);
//知道长度后,随机一个数字,再使用循环,来输出该菜单名
printf("%s",a);
fclose(fp1);
上面定义的数组是50的长度,所以小文件是足够了。
2、如果你还想比较来个数据的话,你可以直接用字符串的cmp方法来比较两个方法是否相等,返回值为0就是相等。
3、输出的话,那就直接打印好了printf。
以上是关于你知道如何用C语言将格式化数据和字符串相互转换吗?的主要内容,如果未能解决你的问题,请参考以下文章