c - 从由前缀和后缀指定的字符数组中提取字符串

标签 c

我想编写一个从 char 数组中提取数据的函数,该数组包含由前缀(例如 "type=")和后缀(例如 "," 指定的数据) )。我很难使用 strstr 和指针算术,所以我认为发布我编写该函数的尝试是没有意义的。我希望函数体看起来像这样:

void extract_string(char input[], char output[], char start[], end[]) {
    ...
}

并调用函数(带参数),如下所示:

// extracting type and nickname
char message[128] = "type=client_information,port=6666,hostname=127.0.0.1,nickname=stack,";
char type[32];
char nickname[32];
extract_string(message, type, "type=", ",");
extract_string(message, nickname, "nickname=", ",");

您能告诉我实现此功能的正确方法吗?我想这并不太复杂,我只是卡在某个地方...谢谢你的关心。

最佳答案

以下建议代码:

  1. 假设“output[]”数组足够长以容纳结果+1
  2. 假设“output[]”不包含字符串“start[]”或“end[]”

警告:这未经测试

警告:“output[]”中生成的 char 数组不是 NUL 终止的,因此调用代码(可能)应该将该数组预初始化为所有“\0”

void extract_string(char input[], char output[], char start[], end[])
{
    char *startPos = strstr( input, start );
    if( !startPos )
    {
        fprintf( stderr, " %s not found in %s\n", start, input );
        return;
    }

    startPos += strlen( start );

    char *stopPos = strstr( startPos, end );
    if( !stopPos )
    {
        fprintf( stderr, " %s not found in %s\n", end, startPos );
        return;
    }

    memcpy( output, startPos, stopPos - startPos +1 );
} // end function: extract_string

关于c - 从由前缀和后缀指定的字符数组中提取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47695643/

相关文章:

c - 如何循环打印scanf数据的所有结果

c - 为什么 epoll_ctl 说我有一个坏的 fd?

c - 如何删除c中每行后的最后一个空格?

c - 如何将从函数获得的结果传输到 C 中的 char 数组?

c - C语言中如何从文本文件中读取参数

c++ - 如何传递 RGBQUAD 作为参数?

c - 编译算法的 OpenMP 和单线程版本的更好解决方法是什么?

c++ - 如何使用 QtCreator 调试 DLL 项目?

c - 为什么 rand() 总是返回相同的值?

c - 如何在 C 语言中正确使用 isalnum 函数?