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

时间:2016-10-14 02:54:30

标签: c arrays string pointers strtok

我正在尝试从空格(“”)分隔的字符串中获取令牌。但是当字符串为char * type时,以下代码会崩溃应用程序。

#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);

1 个答案:

答案 0 :(得分:3)

strtok_s函数修改指针指向的东西,将分隔符转换为零。所以它不能获取指向常量的指针。但是你传递了它str1,它是一个指向字符串常量的指针。当它尝试修改该字符串以将分隔符转换为零时,它会尝试修改常量。那当然是非法的。