首页 > 其他分享 >C:一个字符数组里面解析出多个字符串

C:一个字符数组里面解析出多个字符串

时间:2024-08-16 15:39:57浏览次数:11  
标签:字符 end char start szNameList1 printf 字符串 解析

一个字符数组里面存放了多个字符串,每个字符串以 ‘\0’。要求把这些有效字符串筛选出来并输出。

 

扩展:'\0\0' 表示字符串结束。V2 方法就是实现的这个扩展功能。

 

#include <stdio.h>
#include <string.h>
#include <malloc.h>


void printSzNameList(char szNameList[], int length){
    printf("\r\n-------------- start printStringList------------------\r\n");
    char temp[256] = {0}; // 假设每个字符串都不会超过127个字符(留一个位置给'\0')  
    const char *start = szNameList; // 指向当前正在处理的字符串的起始位置  
  
    // 遍历整个数组直到遇到结尾或超出长度  
    while (start < szNameList + length) {  
        // 找到当前字符串的结尾('\0')  
        const char *end = strchr(start, '\0');  
  
        // 检查是否找到了结尾且没有超出数组范围  
        if (end == NULL || (size_t)(end - szNameList) >= length) {  
            // 如果没有找到结尾或超出了数组范围,则停止  
            break;  
        }  
  
        // 使用memcpy将字符串复制到临时变量中(包括结尾的'\0')  
        // 注意:这里我们不需要+1来包含'\0',因为strchr已经返回了指向'\0'的指针  
        // 但为了安全起见,我们仍然使用end - start来计算长度(实际上这包括了'\0')  
        memcpy(temp, start, end - start);  
  
        // 输出字符串  
        int charLen = strlen(temp);
        if(charLen>0){
            printf("%s\n", temp);  
        }
  
        // 将临时变量清零(实际上这一步是多余的,因为temp在每次循环开始时都会被重新使用)  
        // 但为了符合您的要求,我们还是执行它  
        memset(temp, 0, sizeof(temp));  
  
        // 更新start指针到下一个字符串的开始位置  
        start = end + 1;  
    }  
    printf("\r\n------------- end printStringList------------------\r\n");
}



void printSzNameListV2(char* ptr){
    printf("\r\n-------------- start printStringListV2------------------\r\n");
       while(ptr && ptr[0])
    {
            printf("%s\n", ptr);
            ptr += (strlen(ptr) + 1);    
    }
    printf("\r\n------------- end printStringListV2------------------\r\n");
}

void test1(){
    printf("========== test1 ============= ");
    char szNameList1[128] = "a11\0a22\0a33\0abcde\0\0\0\0abcdef\0\0";
    //char szNameList2[128] = "a11\0a22\0a33\0abcde\0\0\0\0abcdef\0\0";
    printSzNameList(szNameList1, sizeof(szNameList1));
    printSzNameListV2(szNameList1);
}

void test2(){
    printf("========== test2 ============= ");
    char szNameList1[128] = "a11\0a22\0a33\0abcde\0\0\0\0abcdef\0\0ghijklmn";
    //char szNameList2[128] = "a11\0a22\0a33\0abcde\0\0\0\0abcdef\0\0";
    printSzNameList(szNameList1, sizeof(szNameList1));
    printSzNameListV2(szNameList1);
}

void main(){
    printf("hello c 20240816\n");
    test1();
    test2();
}

// gcc c_demo1.c -std=c11 -o demo1

 

标签:字符,end,char,start,szNameList1,printf,字符串,解析
From: https://www.cnblogs.com/music-liang/p/18362966

相关文章

  • H7-TOOL新版固件2.26发布,增加20多款新系列芯片脱机烧录支持,CAN UDS解析,升级CAN助手,串
    H7-TOOL详细介绍(含操作手册):http://www.armbbs.cn/forum.php?mod=viewthread&tid=89934【PC软件】V2.261.PC软件取消自动检查版本,替换为手动按钮检查更新2.CAN助手  -支持时钟选择(20M40M80M),CANFD支持最高8M波特率(需支持8M的canPHY芯片)  -增加“J1939通用解......
  • wwansvc.dll丢失全解析:无线广域网修复的专家级策略
    wwansvc.dll是一个与Windows无线广域网(WWAN)服务相关的动态链接库(DLL)文件。这个文件主要负责管理WWAN连接,包括通过蜂窝数据网络(如3G、4G/LTE、5G)进行互联网连接。wwansvc.dll在Windows系统中扮演着关键角色,确保用户可以通过移动数据提供商的网络接入互联网。当wwansvc.dll......
  • 四大笔试2025独家攻略 | 四大真题库、题型、面试技巧全面解析!
    不知不觉,四大2025秋招已然开了2家。想去四大的同学,一般会4家都投,以提高上岸成功率(往年同时拿了几家offer的学长学姐也大有人在)。最近来咨询四大笔试的私信逐渐增多,发现同学们对四大笔试还存有很多疑问:“安永的笔试真的有必要刷公务员的行测题目吗?”(迷茫)“毕马威的GBA真的只......
  • 关于JS里的字符表情乱码
    背景1、业务背景公司在处理业务时,需要使用socket传输字符串内容,在A处输入,在B处显示。但反馈说输入表情符号经过传输后,ios会变成问号,PC会乱码。如下情况:2、表情乱码表情符号乱码的原因通常与UTF-8编码的处理不当有关。表情符号属于Unicode中的高码点字符,需要使用4个字......
  • 项目管理系统全解析:从入门到精通
    国内外主流的10款project项目管理系统对比:PingCode、Worktile、用友、泛微、蓝凌、ZohoProjects、Asana、Trello、Basecamp、Jira。在寻找合适的项目管理系统时,你是否感到选择众多、功能复杂让人难以抉择?这正是许多项目经理面临的痛点:如何在成千上万的选项中找到那个既能提......
  • Xinference实战指南:全面解析LLM大模型部署流程,携手Dify打造高效AI应用实践案例,加速AI
    Xinference实战指南:全面解析LLM大模型部署流程,携手Dify打造高效AI应用实践案例,加速AI项目落地进程XorbitsInference(Xinference)是一个开源平台,用于简化各种AI模型的运行和集成。借助Xinference,您可以使用任何开源LLM、嵌入模型和多模态模型在云端或本地环境中运行推理,并......
  • 学霸带你解锁科学记忆法高效学习技巧全解析
    欢迎加入我在CSDN的社区【纽雪澳诺加海美德】探索科学记忆法的高效学习之旅记忆与学习:一体两面的挑战记忆与学习密不可分,彼此相辅相成。在面对繁杂的知识体系时,记忆的有效运用可以显著提高学习的效率和效果。然而,传统的学习方式往往难以激发人们对记忆的兴趣,导致知识的流......
  • 力扣 | 一维简单线性dp | 2140. 解决智力问题、322. 零钱兑换、2466. 统计构造好字符
    文章目录一、2140.解决智力问题二、322.零钱兑换三、2466.统计构造好字符串的方案数四、91.解码方法五、983.最低票价六、790.多米诺和托米诺平铺需要特别注意的题目有2140.解决智力问题和983.最低票价,因为这两个题目可以启发思路,其他的题都比较普通。一、21......
  • 掌握 PyTorch 张量乘法:八个关键函数与应用场景对比解析
    PyTorch提供了几种张量乘法的方法,每种方法都是不同的,并且有不同的应用。我们来详细介绍每个方法,并且详细解释这些函数有什么区别:1、torch.matmultorch.matmul是PyTorch中用于矩阵乘法的函数。它能够处理各种不同维度的张量,并根据张量的维度自动调整其操作方式。torch......
  • Python格式化字符串大全
    Python提供了多种方式来格式化字符串,以下是主要的几种方法,我会用一个新的例子来展示它们的用法。假设我们有三个变量name,age,和city,我们想要打印一句话:“Hello,mynameisAlice,Iam30yearsoldandIliveinNewYork.”%操作符这是较早的格式化方法,又称为格式化字符......