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

标签 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=", ",");


您能告诉我实现此功能的正确方法吗?它认为这并不太复杂,我只是停留在某处...谢谢您的关注。

最佳答案

以下建议的代码:


假设'output []'数组足够长,可以容纳结果+1
假设“输出[]”不包含字符串“开始[]”或“结束[]”


警告:未经测试

注意:'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 - 从由前缀和后缀指定的char数组中提取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47695643/

相关文章:

c - 如何在C函数中将宏作为参数传递?

c - 作业 - 一台服务器为多个客户端提供信号量和共享内存

c - 尝试使用 scanf 读取数字时程序崩溃

c - 当我使用pthread和printf时,输出很奇怪

python - 从网页中抓取文本

mysql - mysql的C语言(如何将mySQL数据库包含到程序中)

c++ - WinSock非阻塞I/O

编译为 32 位或 64 位

c - movl 带有左操作数和 3 个子操作数?

c - pthread_join 似乎修改了我的循环索引