srtok 在 c 中不工作

srtok is not working in c

这是我的代码,

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

main ()
{
    explode (" ", "this is a text");
}

    explode (char *delimiter, char string[])
{
char *pch;
printf ("Splitting string \"%s\" into tokens:\n",string);
pch = strtok (string,delimiter);
while (pch != NULL)
{
    printf ("%s\n",pch);
    pch = strtok (NULL, delimiter);
}
return 0;
}

我使用 gcc -o 1.exe 1.c 编译此代码并且没有显示错误。但是当我执行 1.exe 它显示 Splitting string "this is a text" into tokens: 并且在那一刻 1.exe 停止工作(显示 windows 的对话框)。任何人都可以告诉问题并解决问题吗?我正在使用 windows 10.

在您的 explode() 函数中,您正在传递 字符串 liteal ("this is a text") 并使用与 [=12= 的输入相同的字符串].

由于strtok()修改了输入字符串,在这里,它会调用调用undefined behavior。如第 C11 标准第 §6.4.5 章所述,字符串文字

[...] If the program attempts to modify such an array, the behavior is undefined.

你可以

  • 定义一个数组并使用 字符串文字 对其进行初始化,并将该数组用作 strtok().
  • 的输入
  • 获取一个指针,使用 strdup() 复制初始值设定项,然后将该指针提供给 strtok()

最重要的是,strtok() 的输入字符串应该是可修改的。

虽然不能使用 strtok 执行此操作,因为无法修改文字,但可以使用 strcspn 执行此操作。

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

void explode (char *delimiter, char *string);

int main()
{
    explode (" ", "this is a text");
    return 0;
}

void explode (char *delimiter, char *string)
{
    int span = 0;
    int offset = 0;
    int length = 0;

    if ( delimiter && string) {
        length = strlen ( string);
        printf ("Splitting string \"%s\" into tokens:\n",string);
        while (offset < length) {
            span = strcspn ( &string[offset],delimiter);//work from offset to find next delimiter
            printf ("%.*s\n",span, &string[offset]);//print span number of characters
            offset += span + 1;// increment offset by span and one characters
        }
    }
}