Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

C programming, I dont really know what I did wrong, it would take the name and t

ID: 3821180 • Letter: C

Question

C programming, I dont really know what I did wrong, it would take the name and then just crash, may I please know what I did wrong, thanks!

void main()
{
char name[5][10];
char t[10];

load(name);
sort(name,t);
print(name);

}

void load(char *name[])
{
int i;
for(i=0; i<5; i++)
{
printf("Enter a name: ");
gets(name[i]);

}
}

void sort(char *name[],char t[])
{
int i,j;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
if(strcmp(name[j],name[j+1])>0)
{
strcpy(t,name[j]);
strcpy(name[j],name[j+1]);
strcpy(name[j+1],t);
}
}

void print(char *name[])
{
int i;
for(i=0;i<5;i++)
{
printf(" ");
printf("%s", name[i]);
}

}

Explanation / Answer

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

void main()
{
char name[5][10];
char t[10];
load(name);
sort(name,t);
print(name);
}
void load(char (*name)[10])
{
int i;
for(i=0; i<5; i++)
{
printf("Enter a name: ");
gets(name[i]);
}
}
void sort(char (*name)[10],char t[])
{
int i,j;
for(j=0;j<4;j++)
if(strcmp(name[j],name[j+1])>0)
{
strcpy(t,name[j]);
strcpy(name[j],name[j+1]);
strcpy(name[j+1],t);
}
}
void print(char (*name)[10])
{
int i;
for(i=0;i<5;i++)
{
printf(" ");
printf("%s", name[i]);
}
}

You should have written char (*name)[10] instead of char *name[] because the former one declares a pointer "name " pointing to the one dimensional character array of length 10. So now if you use name[i] it will be treated as a character array.