我正在尝试使用strtok
从C中的字符串中获取第二个单词:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
char* GetFirstToken(char str[])
{
const char delim[] = " ";
char inputCopy [255];
strcpy(inputCopy, str);
return strtok(inputCopy, delim);
}
char* GetSecondToken(char str[])
{
const char delim[] = " ";
char inputCopy [255];
strcpy(inputCopy, str);
char * ptr = strtok(inputCopy, delim);
return strtok(NULL, delim);
}
int main(void){
char my_str[100] ="hello world";
char *first = GetFirstToken(my_str);
char *second = GetSecondToken(my_str);
printf("first:%s\n", first);
printf("second:%s\n", second);
return 0;
}
输出为:
first: hello
second: wo
为什么“世界”值不等于second
?
您在每个函数中声明char inputCopy[255]
,然后返回指向它的指针。但是,数组仅存在于函数范围内,从而导致undefined behavior
这些函数返回无效的指针,因为它们指向退出函数后将不活动的局部数组,因此使用指针可以调用未定义的行为。
您只能用一个参数定义一个函数,该参数指定要提取的子字符串。