从字符串中获取第二个单词

问题描述 投票:1回答:2

我正在尝试使用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

c memory-management c-strings strtok
2个回答
2
投票

您在每个函数中声明char inputCopy[255],然后返回指向它的指针。但是,数组仅存在于函数范围内,从而导致undefined behavior


3
投票

这些函数返回无效的指针,因为它们指向退出函数后将不活动的局部数组,因此使用指针可以调用未定义的行为。

您只能用一个参数定义一个函数,该参数指定要提取的子字符串。

© www.soinside.com 2019 - 2024. All rights reserved.