• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

使用sprintf时溢出怎么会影响到变量的值?

6f6d44aa19edb296 2019-04-29 浏览量:1506
使用sprintf时溢出怎么会影响到变量的值?​
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 指定的数据保存区域的大小小于写入数据的大小,就会导致溢出,从而影响后面的单元的值;

    说的直白一点就是指针越界了,把后面的变量的值也给覆盖了,因为sprintf是指针操作,不像数组会报越界,所以使用sprintf要小心,尽量分配大的缓冲区

    • 发布于 2019-04-30
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:6
  • sprintf不会检查缓冲区长度,在一些编译选项下会造成超过长度bug,也就是你提出的问题,如果是windows下vc++的话,尽量用安全函数,sprintf_s
    • 发布于2019-04-29
    • 举报
    • 评论 0
    • 0
    • 0

  • sprintf溢出就相当于指针越界,数组后面的ram数据会被sprintf内部指针修改。
    • 发布于2019-04-29
    • 举报
    • 评论 0
    • 0
    • 0

  • 不安全的sprintf函数在执行时不会考虑前面的字符串数组空间是否足够,如果前面的字符数组空间开得小了,它会自动地占用后续空间,这样就会影响后面的数据。建议使用snprintf函数。
    • 发布于2019-04-30
    • 举报
    • 评论 0
    • 0
    • 0

  • sprintf函数在执行时不会考虑前面的字符串数组空间是否足够,如果前面的字符数组空间开得小了,它会自动地占用后续空间,这样就会影响后面的数据。建议使用更安全的snprintf函数,能够检查字符长度。
    • 发布于2019-04-30
    • 举报
    • 评论 0
    • 0
    • 0

  • 会的,因为sprint内部也是通过指针操作的,如果超出数据范围那就会改变其他ram,导致程序错误
    • 发布于2019-05-01
    • 举报
    • 评论 0
    • 0
    • 0

  • 因为sprintf操作的是一块连续的内存区域,如果操作的区域超过了范围,那肯定会影响到紧接着内存区域的变量的值

    像这种,可以用sprintf_s,这个是sprintf的安全版本,会检查地址范围的

    • 发布于2019-05-02
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

使用sprintf时溢出怎么会影响到变量的值?