sizeof(array)在此strstr重新实现中未提供预期值

Joh*_*ing 1 c++ arrays pointers sizeof

我已经将这个简单的strstr重新制作作为练习,但是有一个我不理解的错误

#include <iostream>
#include "windows.h"

using namespace std;

int strstr2(char *arr, char *findme)
{
    const int sizearr = sizeof(arr) / sizeof(char);
    const int sizefindme = sizeof(findme) / sizeof(char);

    int j=0;
    for(int i=0; i<sizearr; i++)
    {
        if(arr[i] == findme[j])
        {
            // Match
            if(j == sizefindme-1)
                return i;
            else
                j++;
        }
        else
        {
            j = 0;
        }
    }
    return -1;
}


int main (int argc, char **argv) 
{
    char arr[] = "I'd like 2% milk";
    char toBeFound[] = "like";

    int pos = strstr2(arr, toBeFound);
    Sleep(3000);
}
Run Code Online (Sandbox Code Playgroud)

出于某种原因,这条线

const int sizefindme = sizeof(findme) / sizeof(char);
Run Code Online (Sandbox Code Playgroud)

返回,sizefindme = 8而字符串的长度"like"实际上是4(或使用null终止符5).并且null终止符实际存在于toBeFound数组中.怎么了sizeof?我无法发现错误.

Kar*_*ath 8

sizeof(arr) 是指针的大小,而不是数组的大小.

您可以将数组的长度传递给函数,或者strlen如果始终传递以null结尾的字符串,则使用它.

注意:sizeof(char)总是一个.