博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
snprintf函数的用法
阅读量:2383 次
发布时间:2019-05-10

本文共 1655 字,大约阅读时间需要 5 分钟。

下面代码不能正确输出hello的选项为

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

#include<stdio.h>

struct str_t{

   long long len;

   char data[32];

};

struct data1_t{

   long long len;

   int data[2];

};

struct data2_t{

   long long len;

   char *data[1];

};

struct data3_t{

   long long len;

   void *data[];

};

int main(void)

{

   struct str_t str;

   memset((void*)&str,0,sizeof(struct str_t));

   str.len=sizeof(struct str_t)-sizeof(int);

   snprintf(str.data,str.len,"hello");//VS下为_snprintf

   ____________________________________;

   ____________________________________;

   return 0;

}

正确答案: B  

struct data3_t *pData=(struct data3_t*)&str; printf("data:%s%s\n",str.data,(char*)(&(pData->data[0])));
struct data2_t *pData=(struct data2_t*)&str; printf("data:%s%s\n",str.data,(char*)(pData->data[0]));
struct data1_t *pData=(struct data1_t*)&str;printf("data:%s%s\n",str.data,(char*)(pData->data));
struct str_t *pData=(struct str_t*)&str; printf("data:%s%s\n",str.data,(char*)(pData->data));

 

一张图说明问题。

在编程中,需要关注snprintf()的两个问题:一是它的返回值,二是它的第二个参数。

 

看看下面这段代码的运行结果:

#include 

#include 

 

int main()

{

        int ret;

        char str[10];

 

        printf("sizeof(str) = %d\n", sizeof(str));

 

        ret = snprintf(str, sizeof(str), "%s", "abc");

        printf("%d:%s => %d\n",strlen(str), str, ret);

 

        ret = snprintf(str, sizeof(str), "%s", "1234567890");

        printf("%d:%s => %d\n",strlen(str), str, ret);

 

        ret = snprintf(str, sizeof(str), "%s", "1234567890X");

        printf("%d:%s => %d\n",strlen(str), str, ret);

 

        return 0;

}

 

以上代码运行结果为:

3:abc => 3         // 没有被截断,输出:abc

9:123456789 => 10  // 被截断了,没有输出:1234567890

9:123456789 => 11  // 同样被截断了,没有输出:1234567890X

其中,snprinf的第二个参数是要把字符串中的\0算上,比如大小为5,hello那么拷贝的就是hell\0。

而返回值是指实际需要拷贝的字符串的大小,这里就为5,不包括\0的位置。

转载地址:http://tgfab.baihongyu.com/

你可能感兴趣的文章
各行业都爱用什么编程语言开发?
查看>>
css3实现ps蒙版效果以及动画,炫酷吊炸天!
查看>>
程序员休息时间接私活遭公司辞退,不明觉厉?
查看>>
CSS 、JS实现浪漫流星雨动画
查看>>
花4万学代码,工资却只有5千,这个程序员做的..
查看>>
新手网站建设指南(2)
查看>>
新手网站建设优化,这些网站为你提供数之不尽的免费素材!(3)
查看>>
HTML特殊字符显示(常用到的特殊符号,箭头相关,数学相关,标点,符号相关等)...
查看>>
40岁的程序员找不到工作,原来码农真的是碗青春饭
查看>>
2018年前端性能优化总结,这也是我做程序员的第五个年头了
查看>>
前端进阶(三)从0到1学AJAX,这篇就够了!
查看>>
强大的CSS:实现平行四边形布局效果
查看>>
强大的CSS:滤镜和混合模式处理的图片如何上传下载?
查看>>
强大的CSS:var变量的局部作用域(继承)特性
查看>>
强大的CSS: 使用“变量种子计数器”扩展动画更多可能性
查看>>
强大的CSS:focus-visible伪类真的太6了!
查看>>
强大的CSS:3种姿势实现26个英文字母的案例
查看>>
强大的CSS:placeholder-shown伪类实现Material Design占位符交互效果
查看>>
强大的CSS:图形绘制合集,方便你我!
查看>>
强大的CSS:scroll-snap滚动事件停止及元素位置检测
查看>>