Разделение строки и сохранение в массиве или указателе в C

Я работаю в небольшом проекте, у меня есть некоторые имена, хранящиеся в структуре (пример: Name1, Name2), и мне нужно разбить каждое из них и сохранить в массиве, чтобы я мог затем вызывать каждое имя отдельно (printf (% s , vet [1]) должен печатать только Name2).

Это мой код:

int main(){

    char temp[100];
    LIGA *vetLiga;
    int reference;
    int quantiy;


    separarEquipas(vetLiga, temp, reference, quantity);
}

int separarEquipas(LIGA *p, char vet[100], int vPesquisa, int n){
    
    int i, nr, a;
    char *ptr;
    char *str;
    
    for(i=0;i<n;i++){
        
        if (p->id == vPesquisa){
                nr = p->nrEquipas;
                strcpy(str, p[i].eqLiga);
                ptr = strtok(str, " ,"); 
                
                while(ptr != NULL) 
                {
                    vet[a++] = ptr; //here I'm trying to store each word in a position of the array
                    ptr = strtok(NULL, " ,");
                }
        }
        p++;
    }
    
    return nr;
}

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

Некоторые ошибки, которые у меня возникли при поиске решения:

[Предупреждение] присвоение делает из указателя целое число без приведения; [Предупреждение] передача аргумента 1 'strcpy' делает указатель из целого числа без приведения.

Надеюсь, ты сможешь мне помочь, спасибо!


person Arty    schedule 31.12.2020    source источник
comment
Вероятно, это связано с тем, что p[i].eqLiga не является типом указателя, дважды проверьте тип LIGA   -  person xnsc    schedule 31.12.2020
comment
Вы используете str, не выделяя для него память   -  person Sheik Yerbouti    schedule 31.12.2020


Ответы (2)


Вы не разместили полный код, поэтому из того, что я вижу, vetLiga, который в separarEquipas становится p, не инициализирован.

Другая проблема заключается в том, что вы пытаетесь использовать str в strcpy, не выделяя для этого память. Вам нужно это сделать

char *str = malloc( max_number_of_characters_in_str );

Тогда вот:

vet[a++] = ptr; //here I'm trying to store each word in a position of the array

Вы делаете именно то, что сказали в комментарии. Однако вы не можете сохранить слово в пространстве для одного символа. vet должен быть 2D-массивом или, если вы хотите даже массив указателей на char.

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

person Sheik Yerbouti    schedule 31.12.2020

В main vetLiga никогда не присваивается значение, но, возможно, вы сократили код.

В separarEquipas у вас есть следующее:

 char *str;
 strcpy(str, p[i].eqLiga)

Итак, вы копируете строку в случайное место в памяти.

person koder    schedule 31.12.2020