what does this mean??

C

chutsu

I got errors:
qu2-1.c:66: warning: format '%s' expects type 'char *', but argument 2
has type 'char (*)[19u]'
qu2-1.c:72: warning: format '%s' expects type 'char *', but argument 2
has type 'char (*)[19u]'

but I don't quite know what it means...
<code/>

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

#define MAXPATIENTS 20

struct details {
int id;
char forename[20];
char initial;
char surname[20];
int day_of_entry;
int max_wait;
};

struct details patient[MAXPATIENTS];
int npatients = 0;

//Functions
int day_now(void);
int read_queue(void);
int list_patient(int index);
int queue_patient(struct details newpatient);
void list_queue();
void write_queue();
int insert_patient(int index, struct details newpatient);
int delete_patient(int index);
int find_patient_id(int id);


//Main starts here
int main (void) {
int Choice;
int id;
int index;
int n;


//Loop that continues the program
while(n < 0){
//To keep program running
//Displaying Menu
printf("\n\n");
printf("_________________________________________\n");
printf("|-----------NHS Queue Control-----------|\n");
printf("| Create New Patient \t- Press 1\t|\n");
printf("| Delete Patient \t- Press 2\t|\n");
printf("| Find Patient \t\t- Press 3\t|\n");
printf("| List Queue \t\t- Press 4\t|\n");
printf("| Quit \t\t\t- Press 5\t|\n");
printf("|_______________________________________|\n");
printf("Choice: ");
scanf("%d",&Choice);
printf("\n");
printf("%d \n",day_now());
//Choice made, carrying out function
switch (Choice){
//New Patient
case 1:
index = read_queue() + 1;
printf("Please enter the following details\n");
printf("Patient ID: ");
scanf("%d", &patient[index].id);
printf("Forename: ");
scanf("%s", &patient[index].forename);
printf("\n");
printf("Middle Initial: ");
scanf("%c", &patient[index].initial);
printf("\n");
printf("Surname: ");
scanf("%s", &patient[index].surname);
printf("\n");
printf("Day of Entry (Since 1/1/1970): ");
scanf("%d", &patient[index].day_of_entry);
printf("Maximum Waiting Time: ");
scanf("%d", &patient[index].max_wait);
insert_patient(index, patient[index]);
break;
........

int insert_patient(int index, struct details newpatient) {
//For testing only.....
printf("%d \n",patient[index].id);
printf("%s \n",patient[index].forename);
printf("%c \n",patient[index].initial);
printf("%s \n",patient[index].surname);
printf("%d \n",patient[index].day_of_entry);
printf("%d \n",patient[index].max_wait);
}
 
W

Walter Roberson

I got errors:
qu2-1.c:66: warning: format '%s' expects type 'char *', but argument 2
has type 'char (*)[19u]'
qu2-1.c:72: warning: format '%s' expects type 'char *', but argument 2
has type 'char (*)[19u]'

Those are warnings, not errors.
struct details {
int id;
char forename[20];
char initial;
char surname[20];
int day_of_entry;
int max_wait;
};

Notice that forename and surname are fixed length arrays of up
to 20 characters. A fixed length character array does not necessarily
end in a null byte ('\0'), but you are attempting to print the
names using %s format, which is reserved for character arrays that
*do* end in a null byte. The compiler is warning you that this
might be an incompatability -- if you had a forename or surname
which used all 20 characters of the array, then printing that
forename or surname with %s would "fall off the end" of the character
array with undefined results.

If you are -certain- that forename or surname will end in '\0' then you
can either ignore the warnings, or you can cast the type in the
printf() calls.
 
K

Keith Thompson

I got errors:
qu2-1.c:66: warning: format '%s' expects type 'char *', but argument 2
has type 'char (*)[19u]'
qu2-1.c:72: warning: format '%s' expects type 'char *', but argument 2
has type 'char (*)[19u]'

Those are warnings, not errors.
struct details {
int id;
char forename[20];
char initial;
char surname[20];
int day_of_entry;
int max_wait;
};

Notice that forename and surname are fixed length arrays of up
to 20 characters. A fixed length character array does not necessarily
end in a null byte ('\0'), but you are attempting to print the
names using %s format, which is reserved for character arrays that
*do* end in a null byte. The compiler is warning you that this
might be an incompatability -- if you had a forename or surname
which used all 20 characters of the array, then printing that
forename or surname with %s would "fall off the end" of the character
array with undefined results.

If you are -certain- that forename or surname will end in '\0' then you
can either ignore the warnings, or you can cast the type in the
printf() calls.

The warnings were on the scanf() calls, not the printf() calls.
(chutsu: it would have saved time if you had told us that yourself.)
 
P

pete

I got errors:
qu2-1.c:66: warning: format '%s' expects type 'char *', but argument 2
has type 'char (*)[19u]'
qu2-1.c:72: warning: format '%s' expects type 'char *', but argument 2
has type 'char (*)[19u]'

but I don't quite know what it means...
<code/>
struct details {
int id;
char forename[20];
struct details patient[MAXPATIENTS];
int npatients = 0;
scanf("%s", &patient[index].forename);

(patient[index].forename) is the name of an array of 20 char.
(array of 20 char) is the type of the expression.
An expression of array type, converts to a pointer to its first element
in all but three cases. So,

scanf("%s", patient[index].forename);

is the right way to write that.

(&patient[index].forename) is the address of an array of 20 char.
(pointer to an array of 20 char) is the type of the expression.
When the name of an array is the operand of the & operator,
is one of the cases where the name of an array doesn't
automatically convert to a pointer.
When it's the operand of sizeof is another case
where the name of an array doesn't
automatically convert to a pointer.
The third case, is when a string literal initializes an array.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,582
Members
45,070
Latest member
BiogenixGummies

Latest Threads

Top