CPallini is right, but a better approach would be to use
malloc
to allocate the array, since that will place it on the heap instead of the stack.
Arrays can get very large, very quickly - and stack space is limited, usually about than 1MB where the heap can be "as much as your system will allow".
char** select = (char**) malloc (nr * sizeof(char*));
You can then use it as an array of strings without any problems. Remember to
free
the memory when you are finished with it!
This also has the advantage of persistence: if the array is declared directly within a function, then the stack space is freed up when the function returns, so the string pointers array cannot be used or returned from the function.