Making a function which takes char* exception-proof
First a question: why do you care that an extra string is being created?  Is this function used a lot.  If not, then I see no need to change. 

But beyond that, although I don't know about C++ cleverness, is your replacement function so much more efficient?  You are calling pow repeatedly and using floating point to do an integer job.  Here is an alternative that would be cheaper.  It returns 0 on success, 1 on failure (bad string) and the number desired is output in result.   Notice that string is const. 

int my_atoi(const char* string, int start, int length, long *result)
{
    char copy[length+1];
    memcpy(copy, string + start, length);
    copy[length] = '\0';
    char *end;
    *result = strtol(copy, &amp;end, 0);
    return (*end != '\0');
}


You might also omit the start parameter and call with 

my_atoi(string+start, length, &amp;res);