Парсинг строки и ошибка сегментации - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здраствуйте. Нужно было распарсить строчку. Взялся за strtok. Написал небольшой пример, для себя, что-бы убедится в правильности использования:
#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;
}
во время выполнения получаю ошибку сегментации(см. скрин) дале зашел уже на С++ Reference - strtok посмотрел прототип функции - все правильно. у меня так же char* потом посмотрел на пример который там приведен ниже. скомпилировав и выполнив его я удивился - оно рабоает! оказывается все дело в пятой строчке моего кода. то есть:
// вместо
char* str = "Hellow World!..";
// надо
char str[] = "Hellow World!..";
собственно почему так? ведь, если я не ошибаюсь, в обеих случаях, str - это указатель на начало масива(строки). может кто просветить почему так?

Решение задачи: «Парсинг строки и ошибка сегментации»

textual
Листинг программы
char *str = "hello";
str[0] = 'H';

Объяснение кода листинга программы

  1. Объявляется переменная типа char* с именем str и инициализируется строкой hello.
  2. Затем, используя оператор индексации, переменной str присваивается новое значение 'H'.
  3. Оператор индексации используется для доступа к определенному символу в строке. В данном случае, переменная str содержит адрес первого символа строки hello, и его значение меняется на 'H'.
  4. В результате, переменная str теперь содержит строку Hello.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.5 из 5
Похожие ответы