hmm... I decided to give implementing strbetween a try since I have so little experience with the C string functions.
Here's my version:
Code:
#include <iostream>
#include <cstring>
//returns substring of searchstr between delimiter1 and delimiter2
char* strbetween(char* searchstr, char* delimiter1, char* delimiter2) {
//start of delimiter1 in searchstr
//named betw as it contains substring to be returned
char* betw = strstr(searchstr, delimiter1);
//check that delimiter1 is found
if (betw == 0) {
return 0;
}
//start of delimiter2 in searchstr
char* after_betw = strstr(searchstr, delimiter2);
//check that delimiter2 is found
if (after_betw == 0) {
return 0;
}
//make betw point to start of substring to be returned
betw += strlen(delimiter1);
//check that betw is before delimiter2
if (betw < after_betw) {
int ret_len = after_betw - betw;
char* ret = new char[ret_len+1];
strncpy(ret, betw, ret_len);
return ret;
} else {
return 0;
}
}
int main() {
char* str = strbetween("Stephanie", "tep", "ie");
std::cout << str << std::endl;
delete[] str;
return 0;
}
The part that I'm wondering is this: strbetween() uses new[] to allocate memory for the string to be returned.
Is it safe (i.e. no memory leak) to write main() as:
Code:
int main() {
std::cout << strbetween("Stephanie", "tep", "ie") << std::endl;
return 0;
}
considering that there is then no delete[] for the (temporary) string returned by strbetween()?