c++ - sizeof(array) 在此 strstr 重新实现中未给出预期值

标签 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);
}

由于某种原因这条线

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/

相关文章:

c++ - 将 while 循环转换为数学公式

c++ - 如何获取 vector 中相同值的索引数组?

java - 获取数组中的一些项目

c++ - 为什么 std::vector 在离开不同范围时调用析构函数?

c++ - 无法在 Windows Store App 中访问 USB 设备

c++ - typedef 改变含义

javascript - 在 Javascript 中查找引号内的字符串

arrays - Mongoose 中的子文档数组

c - 我的串联操作有什么问题?

c++ - 使用混合版本的 gcc 的 Makefile