首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在不使用string.h的情况下连接不确定数量的字符串

在不使用string.h的情况下,可以使用指针操作来连接不确定数量的字符串。以下是一个示例代码:

代码语言:c
复制
#include<stdio.h>
#include <stdlib.h>

char *concat(int num, ...) {
    va_list args;
    int i, len = 0;
    char *str, *res;

    va_start(args, num);
    for (i = 0; i < num; i++) {
        str = va_arg(args, char*);
        len += strlen(str);
    }
    va_end(args);

    res = (char*)malloc(len + 1);
    if (!res) {
        printf("Memory allocation failed!\n");
        return NULL;
    }

    va_start(args, num);
    for (i = 0, *res = '\0'; i < num; i++) {
        str = va_arg(args, char*);
        strcat(res, str);
    }
    va_end(args);

    return res;
}

int main() {
    char *s1 = "Hello";
    char *s2 = "World";
    char *s3 = "!";
    char *result = concat(3, s1, s2, s3);

    printf("%s\n", result);
    free(result);

    return 0;
}

在这个示例代码中,我们定义了一个名为concat的函数,它可以接受不确定数量的字符串作为参数,并将它们连接在一起。我们使用了可变参数列表来实现这个功能。在函数内部,我们首先计算所有字符串的长度,然后分配一个足够大的内存块来存储连接后的字符串。最后,我们使用strcat函数将所有字符串连接在一起,并返回结果。

需要注意的是,这个示例代码中使用了malloc函数来分配内存,因此在使用结果之后,需要使用free函数来释放内存。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

何在SSH连接linux情况下使用wireshark抓包TSINGSEE青犀视频云边端架构产品中问题?

而大多数开发者用户都会使用linux版本进行安装。 ? 对于安装部署出现问题,TSINGSEE青犀视频团队研发经常为客户远程调试,通常都会通过抓取网络包方式进行排查。...当我们在使用SSH连接远程客户服务器时候可以有两种方式进行抓包,分别是: 通过tcpdump进行抓包,对于tcpdump抓包,保存到服务器,在拷贝到本地进行分析。...通过wireshark进行抓包,对于ssh连接后,如何使用wireshark? 本文我们就简单介绍一下如何在SSH连接linux情况,使用wireshark进行抓包。...6、在Xshell中对创建SSH会话进行如下设置:“连接>SSH>隧道”“X11转移”,勾选“X DISPLAY”,参数无需修改。 此时通过SSH连接出现以下错误: ?...再次连接SSH ? 8、连接成功后,再次运行wireshark ? 可以看到wireshark正常启动了,就可以正常使用wireshark了。

2K20

C语言 第七章 数组与字符串

一、数组 1.1、数组概念 用来存储一组相同类型数据数据结构。有点像班上放手机手机袋,超市储物柜。 特点:只能存放一种类型数据,全部是int型或者全部是char型,数组里数据成为元素。...,ages[0]=1;ages[1]=2;可以像这样对数组元素进行赋值,但是2,3,4等元素值时不确定。...给全部元素赋值,则在数组说明中,可以不给出数组元素个数。...、使用gets,puts完成 /* Note:Your choice is C IDE */ #include "stdio.h" #include "string.h" void main() {...2.3、字符串连接函数strcat 格式: strcat (字符数组名1,字符数组名2) 功能: 把字符数组2中字符串连接到字符数组1 中字符串后面,并删去字符串1后串标志“\0”。

77680
  • CC++字符串函数

    ——字符串拼接 在C和C++中,strcat函数用于将一个字符串连接到另一个字符串末尾。...它同样定义在#include头文件中。strcat会将源字符串附加到目标字符串末尾,并在连接字符串末尾添加一个空字符 \0 来确保它是一个有效字符串。...与strcpy一样,为了避免缓冲区溢出,开发者应该使用更安全函数,strncat,它允许指定最大可以复制字符数。...五、strncat——字符串拼接(进阶) strnact 函数用于将一个字符串追加到另一个字符串末尾,同时限制追加字符数量。这个函数定义在#include头文件中。...(进阶) strncmp函数用于将一个字符与另一个字符串进行比较,同时限制比较字符数量

    9510

    C语言strcpy(),memcpy(),memmove() | 数组赋值给数组

    arr1; 方法二 使用C语言库函数解决 1.使用strcpy()和strncpy()函数处理字符串数组 strcpy()函数用于复制一个字符串到另一个字符串。...,因此在这种情况下应该使用 memmove 函数代替。...如果要在多核并行情况下使用memcpy,可以使用多线程或多进程方式,将大块数据分割成多个小块,分别在不同核上进行复制。这样可以利用多核计算能力来提高复制效率。...C++11: 可以使用 std::thread::set_affinity() 方法来设置线程亲和度。 在设置亲和度之前,需要先确定系统中可用 CPU 核数量,并将线程亲和度设置为对应标识。...在切换过程中,需要保存当前线程环境(寄存器值),并将新线程环境加载到 CPU 中。这个过程会消耗一定时间,如果频繁发生,会导致系统性能下降。

    3.6K50

    【C语言基础】:字符串函数(二)

    则对拷贝内容没有数量限制。...如果source大于num,则不会在destination末尾隐式添加空字符。因此,在这种情况下,destination不应被视为以空结束C字符串(这样读取会溢出)。...拷贝数量大于原字符数量使用strncpy时如果原字符串数量小于要求拷贝数量会怎么样呢?arr1中有abcdef六个字符,那如果要求拷贝10个字符该怎么办呢?我们还是来调试看一下。...字符串比较匹配包含 \0 字符,以 \0 作为结束标志 4.1 strstr函数使用 #include #include int main() { char...(注:strtok函数会改变被操作字符串,所以在使用strtok函数切分字符串⼀般都是临时拷贝内容并且可修改。)

    7710

    C语言常用字符串操作函数整理(详细全面)

    stream指定文件中,字符串结束符’\0’写入文件。...> 功能:   计算指定指定字符串s长度,包含字符串结束符‘\0’....参数:   s1:字符串1首地址   s2:字符串2首地址   n:指定比较字符串数量 返回值:   相等:0   大于:>0   小于:<0 举例: char *str1 = "hello...以数值形式储存213,储存<em>的</em>是int类型<em>的</em>值。   C要求用数值形式进行数值运算(<em>如</em>,加法和比较)。但是在屏幕上显示数字则要求<em>字符串</em>形式,因为屏幕显示<em>的</em>是字符。...C还有一些函数专门用于把<em>字符串</em>形式转换成数值形式。   假设你编写<em>的</em>程序需要<em>使用</em>数值命令形参,但是命令形参数被读取为<em>字符串</em>。因此,要<em>使用</em>数值必须先把<em>字符串</em>转换为数字。

    3.6K40

    C++ 字符串操作函数

    由于字符串使用广泛,C和C++提供了一些字符串函数,包括字符串连接函数strcat,字符串复制函数strcpy,字符串比较函数strcmp,字符串长度函数strlen...string 是C++标准定义头文件,它定义了一个string字符串类,里面包含了string类各种操作,s.size(), s.erase(), s.insert()等。...但又包含了老C版本字符串操作strcpy、strcat等,这就相当于,在文件中除了定义自己string类之外,还加了一个#include一句包含了C版本字符串操作。...连接字符串放在第一个字符数组中。...3个参数 3.如果用字符数组形式定义字符串,那么该字符串不允许使用赋值符号,因为变量名代表其实是数组地址。

    2.6K20

    MySQL数据库面试题和答案(一)

    -可以保存可变数量数据。 根据所能容纳最大长度,有四种BLOB类型: - TINYBLOB - BLOB - MEDIUMBLOB - LONGBLOB 9、TEXT数据类型是什么?...13、如何在MySQL中连接字符串? 使用- CONCAT (string1, string2, string3) 14、如何在Mysql中获得当前日期?...MySql中正则表达式用于查询字符串模式。 *匹配前一个字符串0个实例。 +匹配前面的字符串实例。 ?匹配前一个字符串0或1个实例。 .匹配一个字符。...“|”可以用来匹配这两个字符串任何一个。 如何在MySQL中将表导出为XML文件?...在快速情况下,它将只修复索引树,而在扩展情况下,它将创建一个索引行并修复它。 27、MySQL中有哪些表存储引擎? 默认情况下有许多表存储引擎仍然存在。

    7.5K31

    开讲啦:Chap 06 利用数组处理批量数据

    在对全部数组元素赋初值时,由于数据个数已经确定,因此可以指定数组长度,int a[5]={1,2,3,4,5} 可以写成 int[]={1,2,3,4,5}。...C系统在用字符数组存储字符串常量时会自动加一个'\0'作为结束符,‘C program’共有9个字符,字符串是存放在一维数组中,在数组中它占10个字节,最后一个字节'\0'是由系统自动加上去。...scanf函数中输入项如果是字符数组名,不要再加地址符&。 6.3.6 使用字符串处理函数 在使用字符串处理函数时,应该引入#include头文件。...); puts(str); return 0; } strcat函数 - 字符串连接函数 一般形式为:strcat(字符数组1,字符数组2),其作用是把两个字符数组中字符串连接起来,把字符串...连接前两个字符串后面都有'\0',连接时将字符串1后面的'\0'取消,只在新串最后保留'\0'。

    95030

    bzero memset_perl注释

    : char str[100]; memset(str,0,100); 3).memset可以方便清空一个结构类型变量或数组。...> bzero() 会将内存块(字符串前n个字节清零,其原型为: void bzero(void *s, int n); 【参数】s为内存(字符串)指针,n 为需要清零字节数...实际上,bzero(void *s, int n) 等价于 memset((void*)s, 0,size_tn),用来将内存块前 n 个字节清零,但是 s 参数为指针,又很奇怪位于 string.h...注意:bzero() 不是标准函数,没有在ANSI中定义,笔者在VC6.0和MinGW5下编译没通过;据称Linux下GCC支持,不过笔者没有亲测。鉴于此,还是使用 memset() 替代吧。...本站仅提供信息存储空间服务,拥有所有权,承担相关法律责任。发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    46920

    头文件cstring、string、string.h区别「建议收藏」

    头文件cstring、string、string.h区别 是C++标准库头文件,使用stirng类型必须首先包含string头文件,用于字符串操作,string类型可以进行+、 =、...和最大区别在于,其中声明名称都是位于std命名空间中,而后者是全局命名空间。包含cstring之后,就可以在程序中使用C语言风格strcpy之类函数。...使用 C 语言编写应用程序经常使用 strcpy()等字符串复制函数、strcat()等拼接函数,还经常使用 strlen()来确定字符串长度。...string操作 s.empty() s为空返回true,否则返回false s.size() 返回s中字符个数 s[n] 返回s中第n个字符引用,从0算起 s1+s2 返回s1与s2连接 s1...本站仅提供信息存储空间服务,拥有所有权,承担相关法律责任。发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    2.3K10

    头文件string作用_cstring头文件作用

    如果你在MFC下使用C++语言中标准 string类,那么在调用需要C语言风格字符串为参数win api时,你必须显示调用sting.c_str()成员函数,来完成同样转换,也就是说在使用MFC...)才行,这个使用方法比较符合C++标准要求string就是C++标准库里面的string模板(确切地说应该是一个特化模板),但是他同样包含了C风格字符串操作函数定义(应该是通过包含string.h...实现string.h就不需要使用名字空间了,这个是C风格字符串操作一个函数库,strlen,strcpy,strcat,strcmp……都在这里面了,不过既然是C风格库,当然不需要namespace...当然,并非总是越大越好,但在如今情况下,确实越大越好, 因为大库会包含许多功用。标准库中功用越多,开发自个应用程序时能 凭仗功用就越多。...本站仅提供信息存储空间服务,拥有所有权,承担相关法律责任。发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    4.8K10

    c语言进阶部分详解(详细解析字符串常用函数,并进行模拟实现(上))

    它会从给定字符串第一个字符开始,逐个检查每个字符,直到遇到字符串结尾标志 \0。在这个过程中,它会计算字符数量,并最终返回该数量。...:strlen() 函数只计算字符串中字符数量,并不包括结尾空符 \0。...所以,在使用 strncpy() 函数复制字符串后,需要手动在目标字符串末尾添加空字符 2.strncat() strncat() 函数是C语言中一个字符串函数,用于将一个字符串一部分连接到另一个字符串末尾...如果源字符串长度小于 n,则会将整个源字符串连接到目标字符串末尾 2.1示例 #include #include int main() { char...在使用 strncat() 函数连接字符串时,需要确保目标字符串具有足够空间来存储连接结果 3.strncmp() strncmp() 函数是C语言中一个字符串函数,用于比较两个字符串

    21510

    Redis设计与实现(1)-SDS简单动态字符串

    大多数情况下, Redis使用SDS(Simple Dynamic String, 简单动态字符串)作为字符串表示, 比起C字符串, SDS具有以下优点: 常数复杂度获取字符串长度; 杜绝缓冲区溢出;...buf数组中未使用字节数量 int free; // 字节数组, 用于保存字符串 char buf[]; } len属性记录了已使用字节数量(字符串长度); free属性值为0, 表示这个SDS..., 而是使用free属性将这些字节数量记录起来, 并等待将来使用....总结 Redis在大多数情况下使用SDS作为字符串表示; 相比C字符串, SDS具有以下优点: 常熟复杂度获取字符串长度; 杜绝缓冲区溢出; 减少修改字符串长度时所需内存重分配次数; 二进制安全;...N次必然需要执行N次内存重分配 修改字符串长度N次最多需啊哟执行N次内存重分配 可以使用所有库中函数 可以使用一部分库中函数 --- 以上笔记都是整理自<Redis

    22220

    字符串函数仿写

    my_strlen(b)); printf("sizeof(a):%d\n ", sizeof(a)); my_strcat(a, b, sizeof(a)); printf("连接字符串...1字符串就ok 充足的话进行拼接 如果空间不足以拼接参数1和2 但是却>参数1字符数 就可以通过空间-1数量把参数2字符拼接过来 可以说是考虑十分周全。...本函数对于缓存区不够情况下 可以拷贝部分函数(其实是鸡肋 本来strcpy就是要全部拷贝) 但也算是仿写了strcpy_s 一个较为安全 以下是我代码 #include #include...1) 前提是字符串1空间必须足够存放字符串2 否则会崩溃 strncpy函数 根据需要拷贝参数2字符串固定字符 如果固定字符数量>参数1空间则会崩溃 如果固定字符数量>参数2字符串大小...则函数会把参数2字符串拷贝到参数1字符串并且多余地用\0补齐 代码如下: #include #include #pragma warning (disable

    16430

    C语言读写文件

    :fputs(); //参数1:写入字符串 //参数2:文件流 //作用:将字符串写入文件中 //返回值:返回一个非负值,如果发生错误则返回 EOF(-1)。...:要写入内容单字节数 //参数3:要写入size字节数据项个数 //参数4:目标文件指针 //返回值:返回实际写入数据块数目 //作用:向文件写入数据块,以二进制形式对文件进行操作,局限于文本文件...//参数2:存储数据大小 //参数3:要读取文件流 //返回值:成功则返回读取buf,失败则返回NULL,这是,buf中数据不确定 //作用:读取指定场长度字符串存到字符数组中。...//从文件中按行读取字符串,再以字符串写入文件,适用于文本文件,优点是按行读取很方便 示例: #include #include int main() {...//以数据块格式读取,再以数据块格式写入到文件中,可以读取二进制文件,优点是读取二进制文件使用 示例: #include #include int main

    3.3K30

    最通俗易懂地讲解scanf、gets和getchar区别

    接收 回车 ,所以正常情况下计数应该是1。...小结: 接收 空格,接收 回车。 3、实例 总结一下两个函数使用: ==输入完成后:== ==scanf 把数据一把全梭了;== ==getchar 把数据一个一个从兜里掏。...scanf 输入数量3,留下了一个 回车,如果在这里直接接着使用一个 scanf 的话,就会出错: 因为 回车 会留在缓存流中,并被下一个函数 get 读取到,从而扰乱了本来数据读取,继而出现了非预期结果...2、字符串 1、scanf(%s) %c 和 %s 区别是一个是字符,一个是字符串,从这里可以看得出,scanf 函数能对各种类型进行输入, 而不仅仅局限于字符或是字符串,而字符是 getchar,字符串是...不过,无论是对待字符还是字符串,scanf 处理都是比较相似的,这一点倒是比较容易学习和使用,但是 来自 pudn,只有一段开头话: 中文版本:在数据大量情况下,用 gets 读取快于 scanf(

    5.6K31

    字符函数和字符串函数

    如果按照我们模拟代码来说,其会造成死循环而后越界访问。 但是strcat库函数代码实现方式肯定跟我们不一样,更高级,其可以实现自己连接自己 。...长度限制函数 前文 由于前面三个函数 strcat strcpy strcmp 没有长度限制而直接运行,vs编译器认为不安全,在没有 情况下会直接报错,不让运行。...strstr strstr会返回 str2在str1第一次地址 ,前提要str1中有str2(包含\0)。...其格式为 举个例子, #define _CRT_SECURE_NO_WARNINGS 1 #include #include int main() { char...perror头文件为#include 作用是先输出里面的str字符串,再输出个冒号和空格,而后直接输出目前errno对应错误信息(errno一直存在,里面存放着错误码,如果要用就必须使用对应头文件

    6110
    领券