Firstly, "$*" doesn't work in C programs. You'll need to iterate through argv, and append all the arguments to a string.
Secondly, "$*" isn't even that great in shell, you should usually use "$@" because it preserves arguments separation.
Thirdly, what system() does might depend what compiler and library you are using. If it's a windows compiler, I'm not sure its libraries would know how to execute either "~" tilde, or the shell script. I know you said you're using cygwin, but you didn't say if you were using the cywin compiler or a windows compiler.
Fourthly, after all, why would you want to to write a C program to wrap cygwin? I don't know what a "windows process" is... but windows can execute c:/cygwin/bin/bash script.sh arg arg arg without wrapping it. If I really needed a windowsy thing to call cygwin, I'd probably write a .bat script calling bash.