我重新制作了这个简单的 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);
}
由于某种原因这条线
const int sizefindme = sizeof(findme) / sizeof(char);
返回 sizefindme = 8
而字符串 "like"
的长度实际上是 4(或 5,带有空终止符)。空终止符实际上存在于 toBeFound
数组中。 sizeof
有什么问题?我无法发现错误。
最佳答案
sizeof(arr)
是指针的大小,不是数组的大小。
您可以将数组的长度传递给函数,或者如果您总是传递一个以 null 结尾的字符串,则使用 strlen
。
注意:sizeof(char)
始终为一个。
关于c++ - sizeof(array) 在此 strstr 重新实现中未给出预期值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12530103/