C语言实现字符串拼接
本文使用VS2019软件,使用C语言实现字符串拼接以及中间出现的一些问题
文章目录
- C语言实现字符串拼接
- 前言
- 一、字符串拼接函数stract
- 二、字符串拼接函数strcat_s
- 三、"string is not null terminated"解决办法
- 四、程序和结果
- 总结
前言
提示:最近在研究格雷码的实现,本来准备用C语言先实现一,但是在C语言实现的过程中需要进行字符串拼接,于是写了一个demo实现字符串的拼接,但是在实现的过程中出现了一点问题,于是写了这篇博客进行记录
一、字符串拼接函数stract
以下操作需要包含头文件为:
1 2 3 | #include <stdio.h> #include <string.h> #include <stdlib.h> |
既然是使用C语言实现字符串拼接,那肯定会想到使用strcat函数,该函数的定义如下:
1 | char * strcat ( char * destination, const char * source ); |
它将source字符串拼接到destination字符串的末尾,示例如下:
1 2 3 4 | char* str1={<!-- -->"000"}; char* str2={<!-- -->"001"}; strcat ( str2, str1 ); //str1被拼接到了str2的结尾,结果为001000 strcat ( str1, str2 ); //str2被拼接到了str1的结尾,结果为000001 |
但是在使用的过程中VS2019会报错,显示strcat不安全,建议使用strcat_s。于是接下来就只好使用strcat_s代替了。
二、字符串拼接函数strcat_s
strcat_s的定义为:
1 2 3 4 5 | errno_t strcat_s( char *strDestination, size_t numberOfElements, const char *strSource ); |
其中strDestination是以Null结尾的目标字符串缓冲区。
numberOfElements是目标字符串缓冲区大小。
strSource是以Null结尾的源字符串缓冲区。
使用示例:
1 | strcat_s(str, num,str1); |
当然以上代码的变量需要先声明。
在了解之后对程序直接进行了修改(此为错误示范,请勿复制)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | int main() {<!-- --> char* a = NULL; char* str1 = {<!-- -->"000"}; char* str2 = {<!-- -->"001"}; int num; num = strlen(str1)+ strlen(str2) + 1; char* str = (char*)malloc(num*sizeof(char)); strcat_s(str, num,str1); strcat_s(str, num,str2); printf("%s", str); return 0; } |
此方法可能大佬已经看出来有什么不妥了,但是当时我并不知情,直接点击运行按钮,结果运行的过程中报错了,错误为:
三、"string is not null terminated"解决办法
遇到问题不要惊慌,直接看一遍大致问题,但是也没有理解,便去上网找寻答案。
在找寻后发现问题出在了str进行初始化分配空间的时候使用的是malloc函数,而使用这个函数进行动态空间分配的时候只是分配了内存空间,但是对内存空间中的内容并没有进行初始化。上文我们提到了使用strcat_s函数时的目的字符串和源字符串都需要以NULL结尾,这就是问题所在。
于是我们使用了另一个动态分配空间的函数calloc,该函数在进行动态空间分配的时候使用会将分配的空间初始化为0,这样就可以正常运行了。
注:malloc和calloc函数定义:
1 2 3 | void* malloc(size_t size); //malloc()函数不会初始化声明的内存 void* calloc(size_t num, size_t size); //calloc()函数声明内存并将它们初始化为0 |
四、程序和结果
程序如下(头文件在上文已经给出):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | int main() {<!-- --> char* a = NULL; char* str1 = {<!-- -->"000"}; char* str2 = {<!-- -->"001"}; int num; num = strlen(str1)+ strlen(str2) + 1; char* str = (char*)calloc(num, sizeof(char)); strcat_s(str, num,str1); strcat_s(str, num,str2); printf("%s", str); free(str); return 0; } |
程序运行结果如下:
总结
本文使用C语言实现字符串的拼接,并详述了strcat()函数、strcat_s()函数、malloc()函数和calloc()函数的使用方法,希望可以给各位带来启发,不足之处还请各位批评指正。