Я пытаюсь разбить строку, используя функцию strtok
. Но программа перестала работать, если я использую указатель на символ в качестве аргумента этой функции.
Если я инициализирую строку как s2
или s3
, программа работает хорошо. Но если я использую указатель на символ как s1
, программа получает Segmentation fault (core dumped)
.
char *s1 = "1A 2B 3C 4D";
char s2[] = "1A 2B 3C 4D";
char s3[20] = "1A 2B 3C 4D";
Проблема в том, что другие функции printf
и strlen
работают без сбоев, но только strtok
получить ошибку.
Полный код ниже:
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
void split_string(char *s) {
char * token = strtok(s," ");
while (token != NULL) {
printf("%s\n", token);
token = strtok(NULL, " ");
}
}
int main()
{
char *s1 = "1A 2B 3C 4D";
char s2[] = "1A 2B 3C 4D";
char s3[20] = "1A 2B 3C 4D";
printf("size of s1 = %ld, s2 = %ld, s3 = %ld\n", strlen(s1), strlen(s2), strlen(s3));
printf("s1: %s\ns2: %s\ns3: %s\n",s1,s2,s3);
printf("split s2: \n");
split_string(s2);
printf("split s3: \n");
split_string(s3);
printf("split s1: \n");
split_string(s1);
return 0;
}
Результат после выполнения:
size of s1 = 11, s2 = 11, s3 = 11
s1: 1A 2B 3C 4D
s2: 1A 2B 3C 4D
s3: 1A 2B 3C 4D
split s2:
1A
2B
3C
4D
split s3:
1A
2B
3C
4D
split s1:
Segmentation fault (core dumped)
strtok
со страницы man
: char *strtok(char *str, const char *delim);
Пожалуйста, помогите понять эту проблему.