在C++中,将char数组传递给super给erros?

oka*_*ami 0 c++ arrays stack

我有这个结构:

class Base
{
public:
    void doACopy(char* strToCopy) {
        strcpy(str, strToCopy);
    }
private:
    char str[4];
};

class Derived : public Base
{
public:
    void doSomething() {
        char toCopy[4];
        toCopy[0] = 'a'; toCopy[1] = 'b'; toCopy[2] = 'c';
        Base::doACopy(toCopy); // is there any problem passing toCopy here?
    }
};
Run Code Online (Sandbox Code Playgroud)

我知道toCopy是在堆栈上分配的.将此数组传递给super是否有任何问题,在这种情况下是Derived :: doACopy?

Mat*_*hen 6

堆栈内存被破坏没有问题. toCopydoSomething返回之前有效,到那时strcpy完成.

但它们必须都是长度4,你必须NUL终止toCopy:

private:
    char str[4];

// ...
char toCopy[4];
toCopy[0] = 'a'; toCopy[1] = 'b'; toCopy[2] = 'c';
toCopy[3] = '\0';
Run Code Online (Sandbox Code Playgroud)

原样,没有NUL终结符(甚至是空间),这会导致缓冲区溢出strcpy.

  • 也许,strcpy会将字符复制到包括它找到的第一个NULL.如果你没有提供终结器,它将继续运行,直到它在内存中找到一个.谷歌`缓冲区溢出`,或`缓冲区溢出`. (2认同)