Парсинг строки и ошибка сегментации - C (СИ)
Формулировка задачи:
Здраствуйте. Нужно было распарсить строчку. Взялся за strtok. Написал небольшой пример, для себя, что-бы убедится в правильности использования:
во время выполнения получаю ошибку сегментации(см. скрин)
дале зашел уже на С++ Reference - strtok посмотрел прототип функции - все правильно. у меня так же char*
потом посмотрел на пример который там приведен ниже. скомпилировав и выполнив его я удивился - оно рабоает!
оказывается все дело в пятой строчке моего кода. то есть:
собственно почему так? ведь, если я не ошибаюсь, в обеих случаях, str - это указатель на начало масива(строки). может кто просветить почему так?
#include <stdio.h>
#include <string.h>
int main(){
char* str = "Hellow World! This string will be tokenized."
char* delimiters = " .!";
char* next = strtok(str, delimiters);
while(next != NULL){
printf("%s\n", next);
next = strtok(NULL, delimiters);
}
return 0;
}// вместо char* str = "Hellow World!.."; // надо char str[] = "Hellow World!..";
Решение задачи: «Парсинг строки и ошибка сегментации»
textual
Листинг программы
char *str = "hello"; str[0] = 'H';
Объяснение кода листинга программы
- Объявляется переменная типа char* с именем
strи инициализируется строкойhello. - Затем, используя оператор индексации, переменной
strприсваивается новое значение 'H'. - Оператор индексации используется для доступа к определенному символу в строке. В данном случае, переменная
strсодержит адрес первого символа строкиhello, и его значение меняется на 'H'. - В результате, переменная
strтеперь содержит строкуHello.