Analyser correctement arguments de ligne de commande en C

Ce que je suis en train de faire est de prendre dans les arguments de ligne de commande et de modifier certaines variables en fonction des arguments. J'ai attaché un morceau de mon code parce que l'ensemble du code est de ~400 lignes.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {

    char somestring[500];
    int ca=0;
    if (argc==1) //if no arguments are specified use defaults
    {
    }
    else
    {
        while(ca<argc)
        {
               ca++
            if(strcmp(argv[ca],"-f")==0)
            {
                printf("This works");
                ca++; 
                if(strcmp(argv[ca],"red")==0){
                    printf("this will print red\n");
                }
                else{
                    printf("invalid color");
                }
            }
            if(strcmp(argv[ca),"")==0)
            {
                printf("invalid argument");
            }
            else {
                strcat(somestring,argv[ca]);
            }
        }
        printf("%s",somestring);
    }
}

Si les entrées d'utilisateur:

./foobar -f rouge c'est une chaîne

le programme doit d'impression:

"ce sera imprimée en rouge c'est une chaîne"

Si les entrées d'utilisateur:

./foobar -f rouge

le programme devrait print "nombre incorrect d'arguments de ligne de commande".

Quelle est la meilleure façon de le faire? J'ai essayé des tonnes de possibilités avec pas de chance.
Nombre variable d'arguments est le principal problème pour moi (d'ailleurs j'ai plus de 5 options d'e.g..-f -b -h -w -e)

De l'aide serait très appréciée. Je peux ajouter mon code entier si vous le souhaitez.