从返回指针的函数返回null

时间:2014-10-19 16:42:56

标签: c++ function pointers null return

我编写的程序涉及一个将2个字符串作为输入的函数。该函数应返回指向str1中str2出现的指针(如果存在),如果不存在则返回NULL。如果在str1中找到,该函数应基本返回str2。代码工作但我无法弄清楚如果newstring没有元素如何从函数返回NULL。如果没有分配新闻字符串,如何返回NULL的任何指导将不胜感激,谢谢!

#include<iostream>
using namespace std;
template <class T>
int lenstr(T str1)      // Function that finds length of a string , instead of using the strlen or sizeof functions.
                        // this function will work for all data types and not just char.
{
    int count = 0;
    while(str1[count] != '\0')
    {
        count++;
    }
    return count;
}
char* mystrstr(char *str1 , const char* str2)
{
    int len1 = lenstr(str1);
    int len2 = lenstr(str2);
    char *newstring = new char[len2];
    int i = 0;
        for (int j = 0;j<len1;j++)
        {
            if(str1[j] == str2[i])
            {
                newstring[i] = str1[j];
                i++;
            }
            else
            {
            i = 0;
            }
        }
        return newstring;
}
void main()
{
    char str1[28] = {"this is a test program"};
    char str2[15] = {"tes"};
    int len2 = lenstr(str2);
    char* returnstring;
    returnstring = mystrstr(str1,str2);
    for(int i = 0;i<len2;i++)
    {
    cout<<returnstring[i];
    }
    cout<<endl;

    delete returnstring;

}

2 个答案:

答案 0 :(得分:1)

您的strstr变体不会返回指向str1中str2的出现的指针。它只需要从str1获取尽可能多的字母,它们在str2中并返回指向新字符串的指针。 如果您的问题是正确的,这就是您所需要的:

char* mystrstr(char *str1 , char* str2)
{
    int len1 = lenstr(str1);
    int len2 = lenstr(str2);
    char *ptr1, *ptr2;
    char *result;

    for(ptr1 = str1, ptr2 = str2; *ptr1; ptr1++)
    {
        if(*ptr2 == 0)
            break;
        if(*ptr1 == *str2)
            result = ptr1;
        if(*ptr1 == *ptr2)
        {
            ptr2++;
        }
        else
        {
            ptr2 = str2;
            result = NULL;
        }
    }
    return result;
}
int main()
{
    char str1[28] = {"this is a test program"};
    char str2[15] = {"tes"};
    int len2 = lenstr(str2);
    char* returnstring;
    returnstring = mystrstr(str1,str2);
    if(returnstring != NULL)
    {
        cout << returnstring;
    }
    else
    {
        cout << "returnstring is NULL" << endl;
    }
    delete returnstring;
}

答案 1 :(得分:0)

尝试使用所有0来初始化newstr,如下所示:

char *newstring = new char[len2];

for (int i = 0; i < len2; i++) {
    newstring[i] = '0';
}

(newstr默认情况下应该用0来初始化,但我对此并不十分肯定,所以我只是发布了这个循环,因为我并不是100%)

然后,在循环结束时,如果newstring在第一个索引处仍然包含0,则返回 nullptr