C - 有时分隔符之间没有值时如何用分隔符分割字符串?

Bur*_*çın 0 c split c-strings strtok segmentation-fault

我试图按如下方式分割字符串: 1.97E+13,1965.10.30,12:47:01 AM,39.1,23,greece,,,,,10,4.8,4.6,4.6,4.8,4.6,4.7

我使用strtokand Give,作为分隔符,但由于某些逗号之间没有值,因此出现分段错误。

将空值分配给连续逗号的正确方法是什么?

Vla*_*cow 6

而不是strtok使用函数strspn和strcspn.

这是一个演示程序。

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

int main( void )
{
    const char *s = "1.97E+13, 1965.10.30, 12:47 : 01 AM, 39.1, 23, "
        "greece, , , , , 10, 4.8, 4.6, 4.6, 4.8, 4.6, 4.7";

    const char *delin = ",";

    for (const char *p = s; *p; p += *p != '\0')
    {
        size_t n = strcspn( p, delin );
        if (n == 0)
        {
            puts( "empty" );
        }
        else
        {
            printf( "\"%.*s\"\n", ( int )n, p );
        }

        p += n;
    }
}
Run Code Online (Sandbox Code Playgroud)

程序输出是

"1.97E+13"
" 1965.10.30"
" 12:47 : 01 AM"
" 39.1"
" 23"
" greece"
" "
" "
" "
" "
" 10"
" 4.8"
" 4.6"
" 4.6"
" 4.8"
" 4.6"
" 4.7"
Run Code Online (Sandbox Code Playgroud)

  • 作为一个优点——您可以将“strspn”和“strcspn”与字符串文字一起使用,而无需修改原始的“:)” (4认同)