字符串系列函数(不断跟新)

1.sprintf,sprintf_s

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

vs下需要加上_CRT_SECURE_NO_WARNINGS


#include <iostream>
using namespace std;
int main()
{
char name[1];
int input = 9099;
sprintf(name,"%d", input);
system("pause");
}

这个貌似是典型的缓冲区溢出,程序崩溃,赋值超出了name的内存范围

sprintf_s是sprintf的安全版本,编译器都推荐使用这个


#include <iostream>
using namespace std;
int main()
{
char name[1];
int input = 9099;
sprintf_s(name, 1,"%d", input);
system("pause");
}

这个指定了缓冲区是1个字节大小,而将大于1字节大小的赋值到缓冲区中马上报错

而sprintf_s(name, 20,"%d", input);错误的将缓冲区的大小调到20,同样会造成内存溢出。所以要正确的指定缓冲区大小


#include <iostream>
using namespace std;
int main()
{
char name[1];
int input = 9099;
sprintf_s(name, "%d", input);
getchar();
}

同样会报错

任何企图将格式字符串输出小于本身长度的缓冲区中都会报错。

2.strcpy,strncpy,strcpy_s

char* strcpy(char* dest, const char* src);

把以Null字符结束的dest字符复制到dest指向的内存中,返回指向dest的指针

str与dest内存不能重叠且dest有足够的内存来存放stc的内容


#include <iostream>
using namespace std;
int main()
{
char* source = "123";
char name[2];
strcpy(name, source);
getchar();
}

会报错,因为dest的内存太小了

strncpy

char* strncpy(char* dest, char* src, int num);

如何提前遇到\0,则剩余的不全\0


#include <iostream>
using namespace std;
int main()
{
char des[]="Hello,iam!";
char source[]="abc\0def";
strncpy(des, source, 5);
getchar();
}

会不全\0

errno_t strcpy_s(char *strDestination, size_t numberOfElements, const char
*strSource );

这个也是指定缓冲区长度的复制方法

字符串系列函数(不断跟新),布布扣,bubuko.com

时间: 2024-11-05 14:48:36

字符串系列函数(不断跟新)的相关文章

字符串系列函数在序列化中的问题

最近用到了protobuf传输数据,但在protobuf之前还有个协议头. 因为是重构,所以需要模拟协议头部.有如下代码 string data; char buffer[256]; memcpy(buffer, &header, sizeof(header)); data.append(buffer); client端发给server端的数据,总是少几个字节,用gdb调试时,发现有部分截断. 经过定位,发现是buffer序列成为二进制后,有Cstring的终止字符.导致append 不完全.

php常用字符串处理函数

PHP 字符串函数是 PHP 核心的组成部分.无需安装即可使用这些函数. 常用的字符串处理函数: str_replace():替换字符串中的一些字符(对大小写敏感). str_repeat():把字符串重复指定的次数. strlen():返回字符串的长度. stripos():返回字符串在另一字符串中第一次出现的位置(对大小写不敏感). str_split():把字符串分割到数组中. trim():移除字符串两侧的空白字符和其他字符. ltrim():移除字符串左侧的空白字符或其他字符. rtr

php字符串处理函数大全

php字符串处理函数大全 addcslashes - 为字符串里面的部分字符添加反斜线转义字符addslashes - 用指定的方式对字符串里面的字符进行转义bin2hex - 将二进制数据转换成十六进制表示chop - rtrim() 的别名函数chr - 返回一个字符的ASCII码chunk_split - 按一定的字符长度将字符串分割成小块convert_cyr_string - 将斯拉夫语字符转换为别的字符convert_uudecode - 解密一个字符串convert_uuencod

(原创)Python字符串系列(1)——str对象

在本博客 <Python字符串系列> 中,将介绍以下内容: Python内置的str对象及操作 字符串的格式化 Python中的Unicode字符串 Python中的正则表达式 re模块 本文将介绍Python内置的 str 类型,列举Python中字符串对象支持的方法,使用这些方法可以实现强大的字符串处理功能. 在Python 2 中,普通字符串与Unicode字符串有着明确的区分,二者都是Python内置的基本类型,例如: >>> type(str) <type '

PHP输出缓存ob系列函数详解

ob,输出缓冲区,是output buffering的简称,而不是output cache.ob用对了,是能对速度有一定的帮助,但是盲目的加上ob函数,只会增加CPU额外的负担 ob的基本原则:如果ob缓存打开,则echo的数据首先放在ob缓存.如果是header信息,直接放在程序缓存.当页面执行到最后,会把ob缓存的数据放到程序缓存,然后依次返回给浏览器.下面我说说ob的基本作用:  1)防止在浏览器有输出之后再使用setcookie().header()或session_start()等发送

Strsafe.h:更安全的C语言字符串处理函数

原文出处:Strsafe.h: Safer String Handling in C 作者:Michael Howard 编译:王凌峰 在微软公司举行的Microsoft Windows Security Push 活动期间,一批测试者.程序管理经理和普通程序员共同决定要为 C 语言量身定制一套具有较高安全性的字符串处理函数,并且希望这些函数能被 Windows 程序员和微软公司内部的程序员所采用. 简单说来,现有的 C 语言运行时函数实在难以在当今充斥着恶意攻击企图的大环境下立足.这些函数要么

PHP内置的字符串处理函数

字符串的特点    1.其他类型的数据用在字符串类型处理函数中,会自动将其转化成字符串后,在处理 <?php echo substr("abcdefghijklmn",2,4),"<br>"; //cdef //使用数字会自动转化为字符串 echo substr(123456,2,4); //3456 ?> 2.可以将字符串视为数组,当做字符集合来看待 <?php $str="abcdefg"; //下面这两种方法都

几个常见字符串处理函数的实现原理

字符串是一种常见的数据结构,对字符串的处理又可以十分灵活,所以在实际开发,尤其是非数值处理中,字符串的应用非常广泛.虽然很多字符串操作都封装在了函数库里,应用程序可以直接通过调用库函数来实现字符串处理,然而对于开发者而言,若能了解其底层实现原理,对于应用编程而言还是大有裨益的. 这篇文章主要介绍几种常用的字符串处理函数的实现原理. 一.strlen函数 strlen函数:计算字符串的实际长度,不包括'\0'. 算法:从第一个字符开始扫描,直到遇见第一个'\0',停止扫描,返回字符串长度. 代码如

PHP中自带的字符串操作函数合集

1.查找字符位置函数: strpos($str,search,[int])://查找search在$str中的第一次位置从int开始: strrpos($str,search,[int])://查找search在$str中的最后一次出现的位置从int开始 2.提取子字符函数(双字节) submit($str,int start[,int length])://从$str中strat位置开始提取[length长度的字符串]. strstr($str1,$str2)://从$str1(第一个的位置)