按字符串 "malloc" 拆分不起作用,returns 不同的拆分

Splitting by the string "malloc" isn't working and returns a different split

char str[2500] ="int *x = malloc(sizeof(int));";
    const char s[9] = "malloc";
    char *token = strtok(str, s);

    while( token != NULL ) {
      printf("%s\n", token );
    
      token = strtok(NULL, s);
    }

输出:

int *x = 
(size
f(int));

我想要 return:

int *x = 
(sizeof(int));

但奇怪的是它拒绝这样做,我似乎无法弄清楚为什么要这样做。

编辑:我意识到尺寸太小了,但还是有问题。

函数strtok的第二个参数表示字符串中出现的任何字符都可以作为终止符。

所以这个子串

(sizeof(int))

一旦找到字符串“malloc”中的字符 'o' 就终止。

你需要用到的是标准的C字符串函数strstr。它将在源字符串中找到 sub-string“mallpc”,您将能够输出“malloc”之前和之后的 sub-strings。

例如

char str[2500] ="int *x = malloc(sizeof(int));";
    const char s[9] = "malloc";
    char *p = strstr(str, s);

    if ( p != NULL )
    {
        printf( "%.*s\n", ( int )( p - str ), str );
        if ( p[strlen( s )] != '[=11=]' ) puts( p );
    }

strtok 的第二个参数是用作分隔符的字符列表。它是不是用作分隔符的完整字符串。所以你实际拥有的是字符 'm''a''l''o''c' 作为分隔符,因此这些字符中的任何一个出现的地方都会将字符串。

您想要的是使用 strstr 来搜索子字符串。然后您可以使用它从 str 的开头复制到子字符串的开头,然后再次从子字符串的结尾复制到 str.

的结尾