strtok_s 当字符串为 char * 时程序崩溃

strtok_s crashes program when string is of char *

我正在尝试从由 space(" ") 分隔的字符串中获取令牌。但是当字符串是 char * 类型时,下面的代码使应用程序崩溃。

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

int main(){

char *str1 = "Hello World!"; //char str1[] works
char *token;
char *savePtr;

token = strtok_s(str1, " ", &savePtr);

printf("%s", token);

return 0;
}

我还收到以下警告:

C:\Users\Haris\Desktop\C files>gcc firstProgram.c -o firstprogram.exe
firstProgram.c: In function 'main':
firstProgram.c:10:9: warning: implicit declaration of function 'strtok_s' [-Wimplicit-function-declaration]
 token = strtok_s(str1, " ", &savePtr);
         ^
firstProgram.c:10:7: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
 token = strtok_s(str1, " ", &savePtr);

strtok_s函数修改指针指向的东西,将分隔符变为零。所以它不能接受一个指向常量的指针。但是你传递给它str1,这是一个指向字符串常量的指针。当它试图修改该字符串以将定界符变为零时,它会尝试修改一个常量。那当然是违法的。