Ряд проблем с предоставленным вами кодом.
- Кажется, вам не хватает понимания переменных 'где'.
В функции findCombination () все переменные char c [] находятся в стеке. Таким образом, их время жизни является только временным в том смысле, что как только функция вернется, вы должны предположить, что то, что когда-либо было установлено, будет мусором вне функции.
Когда вы вернете c, вы будете возвращать указатель на память, которая действительно больше не существует и должна рассматриваться как случайная память.
- функция findCombination () не возвращает все пути управления. Если вы этого еще не сделали, включите максимальное количество предупреждений при компиляции и исправьте все предупреждения перед запуском. Компилятор должен жаловаться, что функция не возвращает значение.
Два способа исправить эту функцию и решить проблему 1 - это ...
A. Используйте динамическую память для возврата массива c.
char *cbuffer = (char *) malloc(sizeOfArrayHere);
memcpy(cbuffer, c, sizeOfArrayHere);
return cbuffer;
Однако в какой-то момент вам потребуется освободить () этот буфер, иначе вы «утечете» эту память.
B. Предоставьте достаточно большой буфер для функции, чтобы заполнить ее.
void findCombination(char *c, char *cbuffer)
{
/* validating input if needed. */
if (cbuffer == NULL)
{
return;
}
...
/* assuming you have passed in a larger enough buffer. */
memcpy(cbuffer, c, sizeOfArrayHere);
...
}