2016-10-14 5 views
1

Я пытаюсь получить токен из строки, которая ограничена пробелом (""). Но следующий код сбой приложения, когда строка имеет тип char *.strtok_s сбой программы, когда строка имеет 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); 

ответ

3

strtok_s функция изменяет вещь указатель указывает на, поворачиваясь разделители в нулях. Так что не может взять указатель на константу. Но вы передаете его str1, который является указателем на константу строки. Когда он пытается изменить эту строку, чтобы превратить разделители в нули, она пытается изменить константу. Это, конечно, незаконно.

+0

спасибо. Но как я могу использовать strtok_s для изменения строки? Какой тип должен иметь строка? –

+0

* изменить строку и получить токен. Например, строка, с которой я работаю, - «echo par par». Как я могу использовать эту функцию для получения «эха»? –

+0

Просто не передавайте ему указатель на константу. Вы можете сделать это «char str1 [] =« hello world »;' или как этот 'char * ptr = strdup (« hello world »);' или 'char buf [80]; strcpy (buf, «hello world»); '- что угодно. Просто не передавайте ему указатель на константу. –

Смежные вопросы