按字符串 "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
.
的结尾
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
.