da_cow (she/her)@feddit.org to Programmer Humor@programming.dev · 10 days agoI got to avoid memory management for quite some timefeddit.orgimagemessage-square23fedilinkarrow-up19arrow-down10file-text
arrow-up19arrow-down1imageI got to avoid memory management for quite some timefeddit.orgda_cow (she/her)@feddit.org to Programmer Humor@programming.dev · 10 days agomessage-square23fedilinkfile-text
Finally I have a valid reason to learn about memory management. It was also hella weird when encountering it.
minus-squareda_cow (she/her)@feddit.orgOPlinkfedilinkarrow-up0·edit-210 days agoThis is the code I used: #include <stdio.h> #include <string.h> #define MAX_ACCOUNTS 255 typedef struct { unsigned int id; char account_creation_date [10]; char first_name [255]; char last_name [255]; char country_code [2]; unsigned int iban; char password [255]; double balance; } account; account accounts_db[MAX_ACCOUNTS]; unsigned int accounts_created = 0; account get_account_id (unsigned int id) { int i = 0; while(i < MAX_ACCOUNTS) { if(accounts_db[i].id == id) { return accounts_db[i]; } i++; } account account; account.id = -1; return account; } void create_account(char first_name [255], char last_name [255], char password [255], char country_code [2]) { account new_account; new_account.id = accounts_created; strcpy(new_account.first_name, first_name); strcpy(new_account.last_name, last_name); strcpy(new_account.password, password); strcpy(new_account.country_code, country_code); strcpy(new_account.account_creation_date, ""); new_account.balance = 0.0; new_account.iban = 0; accounts_db[accounts_created] = new_account; accounts_created++; } int main() { char first_name [255] = "Max"; char last_name [255] = "Mustermann"; char country_code [2] = "DE"; char password [255]= "password"; create_account(first_name, last_name, password,country_code); account account = get_account_id(0); printf("Name: %s %s \n", account.first_name, account.last_name); printf("Account creation date: %s\n", account.account_creation_date); printf("IBAN: %s %d", account.country_code, account.iban); }``` When you run it you can see, that behind the country code of the IBAN you get the first two letters of the surename
minus-squareLedgeDrop@lemmy.ziplinkfedilinkarrow-up0·10 days agoWithout getting too critical of your code (congrats BTW), never use strcpy instead use strlcpy. strcpy will happily allow you to create buffer overflows (a common challenge with C) which will cause your application to crash. You’ll find more details here. Good luck!
minus-squareda_cow (she/her)@feddit.orgOPlinkfedilinkarrow-up1·10 days agoThanks, I did not knew this. I always appreciate constructive criticism. I am quite new to C so theres a shit ton of stuff I have never done or dont even know about.
This is the code I used:
Without getting too critical of your code (congrats BTW), never use
strcpy
instead usestrlcpy
.strcpy
will happily allow you to create buffer overflows (a common challenge with C) which will cause your application to crash.You’ll find more details here.
Good luck!
Thanks, I did not knew this. I always appreciate constructive criticism. I am quite new to C so theres a shit ton of stuff I have never done or dont even know about.