CPallini is right, but a better approach would be to use
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
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.