Я независимо друг от друга обучения C. У меня есть четыре-структуру члена следующим образом:C Структуры: Печатное элемент строки производит странные результаты
#define aSize 10
struct Students {
char lastName[aSize];
char firstName[aSize];
int age;
int grade;
}
У меня есть две отдельные функции (в файле main.c):
void pasteInfo_1(struct Students S1) {}
и
void printStudents(struct Students S1) {}
pasteInfo()
использует strcpy()
и назначение присваивать значения членам; printStudents()
затем печатает значения, хранящиеся в элементах. Когда я скомпилирую файл:
#in makefile
CFLAGS = -lm -o -Wall
gcc main.c $(CFLAGS) main
Он компилируется без ошибок. Однако, когда я вызываю исполняемый файл, он печатает некоторые очень странные символы, которые выглядят как бинарные/сборочные. Какие-либо предложения? Вот отдельные функции.
void pasteInfo_1(struct Students S1) {
strcpy(S1.lastName, "Effinger");
}
А вот printStudents:
void printStudents(struct Students S1) {
printf("%s\n",S1.lastName);
}
вызовов функций в основной:
int main() {
struct Students S1;
pasteInfo_1(S1);
printStudents(S1);
}
Re: Модификации. После добавления изменения, предложенные user3629249, я получил следующие ошибки:
main.c: 6: 23: предупреждение: «Struct Студенты», объявленная внутри списка параметров не будет виден за пределами этого определения или объявления недействительным pasteInfo (struct Students * pS1); ^ ~~~~~~~ main.c: 7: 27: warning: 'struct Studens' объявленный внутренний список параметров не будет виден вне этого определения или объявления void printStudents (struct Studens S1); ^ ~~~~~~ main.c: В функции 'main': main.c: 22: 14: warning: передать аргумент 1 из 'pasteInfo' из несовместимого типа указателя [-Wincompatible-pointer-types] pasteInfo (& S1); ^ main.c: 6: 6: note: expected 'struct Students *', но аргумент имеет тип 'struct Students *' void pasteInfo (struct Students * pS1); ^ ~~~~~~~~ main.c: 23: 17: ошибка: тип формального параметра 1 не заполнен printStudents (S1); ^ ~ main.c: На верхнем уровне: main.c: 26: 6: Ошибка: конфликтующие типы для '' pasteInfo ничтожной pasteInfo (Struct Студенты * PS1) ^ ~~~~~~~~ основной .c: 6: 6: note: предыдущее объявление 'pasteInfo' было здесь void pasteInfo (struct Students * pS1); ^ ~~~~~~~~ main.c: 32: 6: ошибка: конфликтующие типы для 'printStudents' void printStudents (struct Students S1) ^ ~~~~~~~~~~~~ main.c: 7: 6: note: предыдущая декларация 'printStudents' была здесь void printStudents (struct Studens S1); ^ ~~~~~~~~~~~~
«* Имейте в виду, что это опасно, чтобы узнать C по дезинформированной проб и ошибок *» - я бы хотел что это в значительной степени то, как я учил себя C в детстве, и я хотел бы думать, что в любом случае я все равно в порядке. Не сказал, что рекомендую этот метод, просто говоря. :) – Dolda2000
@ Dolda2000 Аналогичным образом, хотя позже я вернулся к книге (и по стандарту C) и сожалел, что не использовал их для начала. Мои исследования продвинулись бы намного быстрее! – Sebivor
Ну ... Мой дедушка дает мне «проекты» (напишите код, который делает это и это). Верните структуру, а затем распечатайте ее. Спасибо! – Jordan