C/C++中字符串拼接的使用详解(加常见字符串使用小结)
C/C++中针对字符串函数的使用过程中,需要格外注意字符串终止符'\0'。字符串结尾处默认带'\0'。 带形参n的库函数可以有效防止因字符串长度过长导致的段错误,建议使用带n的字符串函数。一 、snprintf函数的使用字符串复制是别样的一种字符串拼接方式,通过将目标字符串复制到源字符串结尾处实现字符串拼接效果。int snprintf(char *str, size_t size, const
C/C++中针对字符串函数的使用过程中,需要格外注意字符串终止符'\0'。字符串结尾处默认带'\0'。 带形参n的库函数可以有效防止因字符串长度过长导致的段错误,建议使用带n的字符串函数。
一 、snprintf函数的使用
字符串复制是别样的一种字符串拼接方式,通过将目标字符串复制到源字符串结尾处实现字符串拼接效果。int snprintf(char *str, size_t size, const char *format, ...)设将可变参数(...)按照 format 格式化成字符串,并将字符串复制到 str 中,size 为要写入的字符的最大数目,超过 size 会被截断。函数声明如下:
int snprintf ( char * str, size_t size, const char * format, ... );
- str -- 目标字符串。
- size -- 拷贝字节数(Bytes)。
- format -- 格式化成字符串,即原格式,10若想输出10,则此处为%d,10若想输出A,则此处为%x。
- ... -- 可变参数。
其中,在进行字符串拼接时,size值为待拷贝字符串长度+1,保证'\0'结尾符加入进来。
#include <iostream> // C++的头文件不带.h
#include <string.h> // 兼容原C语言头文件
using namespace std;
int main()
{
char s1[10] = "abc"; // 指针类型无法扩展长度,需标识为数组形式
char *s2 = "def";
snprintf(s1+3, strlen(s2)+1, "%s", s2); // s1+3 = s1+3*sizeof(char)
cout << strlen(s1) << endl; // strlen不带结束符
cout << s1 << endl;
return 0;
}
输出如下:
6
abcdef
snprintf除了字符串拼接功能外,更重要的一个功能是字符串格式的转换。
printf函数将数据输出到标准的输入输出,而sprintf函数将数据输出到确定的字符串中。
#include <iostream> // C++的头文件不带.h
#include <string.h> // 兼容原C语言头文件
using namespace std;
int main()
{
//char *s1 = "123456"; // 本质上是const char *,字符串是个常量,存放在ROM区,无法修改
char s1[4] = {'0'}; // 字符串后续若修改需标识为数组形式
int u16Temp = 123;
snprintf(s1, sizeof(u16Temp), "%d", u16Temp); // 按%d形式打印 u16Temp的值至s1中
cout << strlen(s1) << endl; // strlen不带结束符
cout << s1 << endl;
return 0;
}
输出如下:
3
123
二、strncpy函数的使用
C 库函数 char *strncpy(char *dest, const char *src, size_t n) 把 src 所指向的字符串复制到 dest,最多复制 n 个字符。当 src 的长度小于 n 时,dest 的剩余部分将用空字节填充。定义如下:
char *strncpy(char *dest, const char *src, size_t n);
- dest -- 指向用于存储复制内容的目标数组。
- src -- 要复制的字符串。
- n -- 要从源中复制的字符数。
代码如下:
#include <iostream> // C++的头文件不带.h
#include <string.h> // 兼容原C语言头文件
using namespace std;
int main()
{
char s1[10] = "abcd";
char *s2 = "efg";
strncpy(s1+3, s2, strlen(s2));
cout << s1 << endl;
}
abcefg
三 、strcat函数的使用
C 库函数 char *strncat(char *dest, const char *src, size_t n) 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾,直到 n 字符长度为止。函数声明如下:
char *strncat(char *dest, const char *src, size_t n);
- dest -- 指向目标数组,该数组包含了一个 C 字符串,且足够容纳追加后的字符串,包括额外的空字符。
- src -- 要追加的字符串。
- n -- 要追加的最大字符数。
代码如下:
#include <iostream> // C++的头文件不带.h
#include <string.h> // 兼容原C语言头文件
using namespace std;
int main()
{
char s1[10] = "abc";
char *s2 = "def";
strncat(s1, s2, strlen(s2)+1); // 需包含结尾符'\0'
cout << strlen(s1) << endl; // strlen不带结束符
cout << s1 << endl;
return 0;
}
输出如下:
6
abcdef
四、C++中字符串的拼接
由于C++很好地兼容了C语言特性,但若在C++环境中写代码,建议使用C++相关语法特性,作为对自己能力的一种锻炼。使用C++特性的字符串拼接如下:
#include <iostream> // C++的头文件不带.h
#include <string.h> // 兼容原C语言头文件
using namespace std;
int main()
{
//char s1[] = {'a','b','c', '\0'}; // 定义1:不建议使用此定义方式,经常忘记加入'\0'
//char s1[] = "abc"; // 定义2:使用C语言数组形式定义字符串
string s1 = "abc"; // 定义3:使用string类定义
string s2 = "def";
string s3;
s3 = s1+s2;
cout << s3 << endl;
}
输出如下:
abcdef
常见字符串问题详解:
一、字符串文本分离函数
strtok函数,可根据特殊的分隔符分割代码,详见博客:
二、字符串与整形转换函数
字符串转整形atoi
整形转字符串itoa
详细介绍参照以下博客:
更多推荐
所有评论(0)