gpt4 book ai didi

c++ - 空指针如何改变它的值?

转载 作者:太空宇宙 更新时间:2023-11-03 10:24:25 25 4
gpt4 key购买 nike

我用的是这样的:

struct Node
{
char name[50];
Node *left,*right;
};

int main()
{
char cmd[10];
Node* p=NULL;

scanf("%s",&cmd);

if (p == NULL)
{
// do something

// THIS NEVER GETS EXECUTED
// WHYYYYY????
//THIS IS STRANGE
}
}

基本上,指针 p 在我读入 cmd 变量后改变了它的值。我试图注释掉 scanf 代码,然后一切正常。很奇怪。

最佳答案

你有一个缓冲区溢出。

内存是这样的:

+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| | | | | | | | | | | | | | |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
^ ^
cmd[10] p

如果scanf读取超过10个字节,就会溢出到p。任何非零值都将无法通过 NULL 检查,即使它不是有效指针也是如此。

关于c++ - 空指针如何改变它的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43172346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com