如何从C语言字符串中提取指定目标串?现有代码输出异常求修正
问题解决:提取指定字符串内容
原代码问题分析
- 错误将目标内容中包含的
\r作为分隔符,导致目标内容被提前截断,初始定位完全偏离目标区域。 strtok的使用逻辑混乱,误处理了字符串前缀,后续的strcpy进一步破坏原字符串结构,最终输出了前缀中的控制字符内容。
修改后的代码
#include <stdio.h> #include <stdlib.h> #include <string.h> int main(){ char str[1024]="\r\n\033[?2004l\r/home/user01\ruuidd:x:108:114::/run/uuidd:/usr/sbin/nologin\r\n\033[?2004h\033]0;user01@audit: ~\auser01@audit:~$ "; // 定位目标内容的起始位置(利用固定开头字符串) char *start = strstr(str, "/home/user01"); if (start == NULL) { printf("未找到目标内容\n"); return 1; } // 定位目标内容的结束位置(目标后紧跟的"\r\n") char *end = strstr(start, "\r\n"); if (end == NULL) { printf("未找到目标结束标记\n"); return 1; } // 在结束位置添加字符串终止符,截断原字符串 *end = '\0'; // 输出目标内容 printf("output : %s\n", start); return 0; }
代码逻辑说明
- 用
strstr定位目标内容的固定起始标识/home/user01,确保精准找到目标开头。 - 从起始位置开始查找目标后的结束标记
\r\n,确定目标内容的边界。 - 通过将结束位置设为
\0截断原字符串,直接输出起始位置开始的内容,即可得到目标字符串。
内容的提问来源于stack exchange,提问作者HOON
相关产品推荐
相关产品推荐

