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
,这是一个指向字符串常量的指针。当它试图修改该字符串以将定界符变为零时,它会尝试修改一个常量。那当然是违法的。
我正在尝试从由 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
,这是一个指向字符串常量的指针。当它试图修改该字符串以将定界符变为零时,它会尝试修改一个常量。那当然是违法的。