Я хочу напечатать элементы из структуры в c, но операторы send и третьи операторы print выдают мне предупреждение: формат указывает тип 'char *', но аргумент имеет тип 'char'. Я знаю, что это связано с указателем, но я не знаю, что я делаю неправильно. Я также изменил его, чтобы показать 2 структуры, которые я использую.

struct student_record{
int student_id;
int student_age;
char first_name;
char last_name; };


struct student_record_node{
struct student_record* record;
struct student_record_node* next;
struct student_record_node* prev; };


void printNode(struct student_record_node *node){
printf("Struct student_record_node: \n");
printf("        student first_name: %s\n", node->record->first_name);
printf("        student last_name: %s\n", node->record->last_name);
printf("        student id: %d\n", node->record->student_id);
printf("        student age: %d\n", node->record->student_age);
printf("\n");}
c
-2
sochima omenkeukwu 25 Апр 2017 в 04:47

2 ответа

Лучший ответ

В объявлении структуры student_record

Char first_name; char last_name;

Указать first_name и last_name два символа, а не символьные массивы (т.е. строки)

При использовании printf ("% s", ELEMENT),% s требует адрес памяти массива символов, т.е. указатель (char *), но поскольку вы передали символ вместо этого, это приводит к синтаксической ошибке.

Чтобы исправить код, отредактируйте объявление структуры, сделав его статическим массивом фиксированной длины или динамически выделяя память для символьного указателя в вашей функции.

0
Saksham 25 Апр 2017 в 04:11

Попробуйте следующим образом:

#include<stdio.h>
#include<stdlib.h> 
#include<stdint.h>
#include<string.h>

struct student_record {
    int student_id;
    int student_age;
    char first_name;
    char last_name;
};

struct student_record_node {
    struct student_record* record;
    struct student_record_node* next;
    struct student_record_node* prev;
};

void printNode(struct student_record_node *node){
    printf("Struct student_record_node: \n");
    printf("        student first_name: %c\n", node->record->first_name);
    printf("        student last_name: %c\n", node->record->last_name);
    printf("        student id: %d\n", node->record->student_id);
    printf("        student age: %d\n", node->record->student_age);
    printf("\n");
}
int main()
{
    struct student_record_node* a = (student_record_node*)malloc(sizeof(student_record_node));
    a->record = (student_record*)malloc(sizeof(student_record));
    a->next = NULL;
    a->prev = NULL;

    a->record->first_name = 'f';
    a->record->last_name = 'l';
    a->record->student_age = 10;
    a->record->student_id = 99;
    printNode(a);

    free(a);
    return 0;
}

Если вы хотите установить имя в качестве строки, используйте char* вместо char и укажите спецификатор формата %s вместо %c.

0
Yasin shihab 25 Апр 2017 в 09:24