I’ve got this simple strstr re-making as an exercise but there’s an error I don’t understand
#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);
}
For some reason the line
const int sizefindme = sizeof(findme) / sizeof(char);
returns sizefindme = 8 while the length of the string "like" is actually 4 (or 5 with the null terminator). And the null terminator is actually present in the toBeFound array. What’s wrong with sizeof? I can’t spot the error.
arrand˛findmeinside the functionstrstr2are pointers tochar, not arrays.sizeofis returning the size of that pointer, which happens to be 8 on your platform. Contrary to somewhat common misbelief, arrays are not pointers. You can usestrleninstead or pass the size of the arrays to the function by another argument.Read this great question and answer for more info about arrays.