Я начал изучать C, и я написал короткую программу, реализующую структуры. На данный момент он имеет только структуру и короткую функцию, которая должна заполнять одну из структур (несколько хранятся в массиве). Программа получает все значения (в настоящее время только для одной структуры, чтобы помочь мне увидеть, что происходит), и проблема начинается в основном вСтруктуры и строки в C
printf("%s", tablica[0].nazwa);
Поскольку программа перестает отвечать на запросы (без ошибок и предупреждений перед).
Если я ставлю:
printf("%d", tablica[0].x);
Это будет выводить значение я помещал, как х, так что я знаю, что есть какая-то проблема со строкой в Printf (но я не могу понять, почему). Это, наверное, легко, но я просто начинающий.
#include <stdio.h>
#include <string.h>
struct struktura
{
char *nazwa;
double x, y, z;
};
int wczytaj(struct struktura tab[])
{
int i;
for (i = 0; i<1; i++)
{
printf("Podaj nazwe: ");
scanf("%s", &tab[i].nazwa);
printf("Podaj x: ");
scanf("%i", &tab[i].x);
printf("Podaj y: ");
scanf("%i", &tab[i].y);
printf("Podaj z: ");
scanf("%i", &tab[i].z);
};
return 0;
}
int main(struct struktura* a)
{ int i;
struct struktura tablica[6];
int wyniki[6][6];
wczytaj(tablica);
printf("%s", tablica[0].nazwa);
}
Извините за то, что некоторые имена на польском языке, я могу исправить это, но я надеюсь, что это не размывает программу).
Поскольку 'nazwa' является символом 'char *', '& tab [i] .nazwa' является' char ** '. Поскольку вы передаете 'scanf' адрес, в который хотите его сохранить, вы просите его сохранить строку в пространстве указателя на символ. Что, если строка занимает больше места, чем указатель на символ? (Скорее всего, это так.) Где-то вам нужно выделить достаточно места для хранения строки. –
Похоже, вы никогда не выделяете пространство для nazwa (определенное как char *), поэтому оно является нулевым указателем. –
Для начала не связывайтесь с 'malloc', но определяйте его статически, как' char nazwa [30] ' –