Ошибка шины с strncpy в C

Я работаю над тем же проектом, что и в этом вопросе, но с немного другим typedef:

typedef struct {
    char* word;
    int index;
} data_t;

typedef struct node node_t;

typedef node {
    void *data;
    node_t *left;
    node_t *right;
}

Я пытаюсь разбить строку на отдельные слова, вставив ее в структуру data_t, а затем вставив ее в двоичное дерево поиска. Идея состоит в том, что при циклическом обходе входной строки, когда обнаруживается, что символ - это символ, обозначающий конец слова, количество символов между началом и концом слова копируется в строку, которая у меня есть. попытался сделать с помощью:

strncpy(newstring, (in+wordstart), (i-wordstart));

где:

char* newstring, in;
int i, wordstart;

Однако gcc выдает ошибку шины, когда вызывается эта конкретная строка. Как можно исправить эту ошибку шины и сохранить текущее решение, или было бы разумнее искать другое решение?

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

2 ответа

Это не объявляет два указателя, это только один указатель и символ

char* newstring, in;

Это должно быть объявлено так:

char *newstring, *in;

Кроме того, как заметил кто-то другой, похоже, что вы не выделяете память для этих указателей.

Это:

typedef node {
    void *data;
    node_t *left;
    node_t *right;
}

не имеет никакого смысла вообще. Нет никаких struct Ключевое слово перед nodeи нет имени для псевдонима типа, который вы пытаетесь ввести после }и нет завершающей точки с запятой. Это не должно компилироваться.

Другие вопросы по тегам