struct name* ошибка
У меня такой вопрос. У меня есть структура, которую нужно заполнить соответствующими данными, полученными из мною написанной функции. Вроде все сделал правильно, но при попытке вывода пишет Segmentation Fault. P.S. все типы данных должны быть в том виде, в котором они заданны (не могу const char* изменить на char* и тд)
Код:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct test {
char* name;
int age;
};
struct test* create_track(const char* name, int age) {
if(name == "" || strlen(name) > 100) {
return NULL;
}
struct test* new_test = (struct test*)malloc(sizeof(struct test));
strcpy(new_test->name, name);
new_test->age = age;
return new_test;
}
int main() {
struct test* track = create_track("John", 26);
printf("%s %d\n", track->name, track->age);
}
Заранее всем спасибо!
Ответы (1 шт):
Ну, проверять name == "" бессмысленно - потому что такое сравнение сравнивает указатель name c указателем на строку "" - с очевидным результатом: они не равны. C-строки нужно сравнивать с помощью функций типа strcmp.
После выделения памяти
struct test* new_test = (struct test*)malloc(sizeof(struct test));
вы копируете строку
strcpy(new_test->name, name);
куда? Вы никак не инициализировали выделенную память, так сто в поле name какое-то левое значение, адрес памяти где-то, куда вы пытаетесь писать.
Нужно выделить память и для строки, куда планируете копировать - типа
new_test->name = malloc(....);
Да, и еще - если вы действительно компилируете код как C, а не как С++ - то можете опустить приведения типов перед вызовами malloc. Они необходимы в C++.