Просто начните изучать C ++ и попытайтесь создать простую функцию, которая выполняет подстроку со следующим кодом:
char* substring(int start, int end, const char* target)
{
size_t length = strlen(target);
char result[(length + 1)];
int iterator = 0;
for(int i = start; i < length; i++)
{
if(i <= end)
{
result[iterator] = target[i];
iterator++;
}
}
result[iterator] = '\0';
cout << result << endl; // This give correct result "aya";
return result;
}
Когда я использую эти функции в основном методе:
int main(int argc, char** argv) {
char some_text[] = "Saya Makan";
char* sub = substring(1, 3, some_text); // No string returned
cout << "Substring Result is: " << sub;
return 0;
}
Это дает вывод, как это:
aya
Substring Result is:
RUN SUCCESSFUL (total time: 44ms)
Как видно из результата, моя функция не возвращает ничего, кроме пустой строки, хотя перед возвратом есть строка кода, переменная «result» правильно отображает результат. Не могли бы вы объяснить мне, что происходит внутри моей функции, я что-то упустил?
Вы возвращаете указатель на локальный массив, который не обязан находиться за пределами функции.
Вам нужно сделать так, чтобы буфер оставался за рамками функции, выделяя его динамически, используя malloc
, И, конечно же, не забудьте free
это позже.
О, только что заметил его C ++.
Так что отбросьте идею malloc
а также free
просто используйте std::string
и не char *
,
Других решений пока нет …