我有这个结构:
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?
堆栈内存被破坏没有问题. toCopy
在doSomething
返回之前有效,到那时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
.
归档时间: |
|
查看次数: |
183 次 |
最近记录: |