Hello, I'm working on a project in C to practice before I take a class this fall that requires C. I decided on making a task list. First, I'm starting with a cli interface, and then I hope to move it to GTK+ since that would look better and I have PyGTK experience.
Anyways, I just finished a function that formats the due date for a task. I want it in MM/DD/YYYY format so the date strings are all the same width (for aesthetics).
So I have a date struct like this:
typedef struct date
{
int month;
int day;
int year;
} date;
I have written a date_to_string() function that takes a pointer to a date struct and returns a char pointer to a string of the date in MM/DD/YYYY format. I'm a bit rusty with char arrays/pointers, so I'm not sure if this is a good way to do it.
/* Convert a date to a string in the format MM/DD/YYYY */
char *date_to_string_std(date *d)
{
char *date_string = (char *) malloc(11*sizeof(char)); /* 11 characters for MM/DD/YYYY + \0 */
char month_string[3];
char day_string[3];
/* Put month int and day int into char arrays of length 3*/
sprintf(month_string, "%d", d->month);
sprintf(day_string, "%d", d->day);
/* If the month < 10, add a 0 in front of the month number
* to fit MM format */
if (strlen(month_string) == 1)
{
month_string[2] = '\0';
month_string[1] = month_string[0];
month_string[0] = '0';
}
/* If the day < 10, add a 0 in front of the day number
* to fit DD format */
if (strlen(day_string) == 1)
{
day_string[2] = '\0';
day_string[1] = day_string[0];
day_string[0] = '0';
}
/* Create a string of the date in MM/DD/YYYY format */
sprintf(date_string, "%s/%s/%d", month_string, day_string, d->year);
return date_string;
}
I would really appreciate any feedback about how I implemented this function. One problem is that I don't free the malloc'd memory given to date_string. But I can't add a
free(date_string);
before the end of the function because the function returns that value. It seems like I should have a local variable for date_string but I'm not sure how that works with returning a local variable.
Also, is there a better way to add the '0' character in front of a month or day number that is only one digit?
Thanks for any suggestions. I'm enjoying figuring things out in C. Python makes it way too easy. :P