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

时间:2017-12-07 12:56:41

标签: c

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

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 个答案:

答案 0 :(得分:0)

以下提议的代码:

  1. 假设'输出[]'数组足够长,可以保存结果+ 1
  2. 假设'输出[]'不包括字符串' start []'也不是'结束[]'
  3. 警告:这未经过测试

    警告:'输出[]'中产生的字符数组不是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