C: strtok по указателю внутри структуры - PullRequest
0 голосов
/ 04 марта 2010

У меня есть структура с таким определением:

typedef struct gRow{
    char *txt;
    char *fileName;
    int line;
} gRow;

и я хочу использовать strtok в текстовой строке. Итак, в некоторой функции, которая имеет gRow *row, я делаю это:

strtok(row->txt, SEPERATOR_CHARACTERS);

и это тот момент, когда я получаю ошибку сегментации. если я заменю его на:

strtok(strdup(row->txt), SEPERATOR_CHARACTERS);

работает просто отлично. есть идеи почему?

Спасибо.

Шахар.

Ответы [ 4 ]

3 голосов
/ 04 марта 2010

Обратите внимание, что strtok изменяет строку - если ваш указатель txt указывает на строку только для чтения (например, константный литерал строки), вы получите исключение.

1 голос
/ 04 марта 2010

strtok изменяет свой первый аргумент.

В случае, если 1 выглядит так, как будто вы передаете указатель на константу char, которую нельзя изменить.

, а в случае 2 вы передаете изменяемую копию, возвращенную strdup .

1 голос
/ 04 марта 2010

strtok изменяет данную ему строку. Если у вас нет права изменять его, вы можете получить ошибку сегментации. strdup предотвращает это, копируя строку.

1 голос
/ 04 марта 2010

Вам нужно выделить память для строки gRow *; Тогда это будет работать нормально, я надеюсь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...