Я новичок в C и не могу понять, почему my_struct_ptr (main) равно нулю в следующем примере. Как бы я назначил адрес структуры в массиве my_structs указателю my_struct_ptr в функции get_my_struct_by_name?
struct my_struct {
char *name;
char *descr;
char *value;
} my_structs[3] = {
{"a", "a description", "value 1"},
{"b", "b description", "value 2"},
{"c", "c description", "value 3"}
};
int get_my_struct_by_name(char *name, struct my_struct *my_struct_ptr) {
int i;
for (i=0; i < (sizeof(my_structs)/sizeof(struct my_struct)); i++) {
if (strcmp(name, my_structs[i].name) == 0) {
my_struct_ptr = &my_structs[i];
printf("works: %s,%s,%s\n", my_struct_ptr->name, my_struct_ptr->descr, my_struct_ptr->value);
return 0;
}
}
return -1;
}
int main() {
int res = 0;
struct my_struct *my_struct_ptr;
if (res = get_my_struct_by_name("b", my_struct_ptr))
return res;
printf( "nil: %p\n", my_struct_ptr);
printf("seg fault: %s,%s,%s\n", my_struct_ptr->name, my_struct_ptr->descr, my_struct_ptr->value);
return res;
}
Редактировать: добавление примера вывода, чтобы, надеюсь, помочь другим. Спасибо всем, кто откликнулся. Это именно та помощь, которую я искал!
Выход:
[prompt ~]$ ./test
works: b,b description,value 2
nil: (nil)
Segmentation fault