网站开发程序是什么,珠海网站建设方案维护,易思腾网站建设,wordpress侧边栏首先我们来看这个错误代码 首先我们看代码逻辑#xff0c;首先main函数调用test#xff0c;test接收的是void类型#xff0c;设置一个指针变量#xff0c;指向null#xff0c;传递给get函数#xff0c;也就是传递一个空指针给getmemory函数#xff0c;这个函数接收了首先main函数调用testtest接收的是void类型设置一个指针变量指向null传递给get函数也就是传递一个空指针给getmemory函数这个函数接收了然后进行运算。
接下来我们进行分析代码的错误逻辑。
为什么不取地址是错误的呢
传递地址指针的指针 当你传递 strstr 的地址给函数时你是在告诉函数你想要操作的是 str 变量的内存地址本身。这允许函数直接修改 str 变量的值或者使用 str 变量的地址进行其他操作。传递指针不取地址 当你传递 str指向 char 的指针给函数时你是在告诉函数你想要操作的是 str 指向的字符串。函数可以通过 str 指针访问和修改字符串的内容但不会直接修改 str 指针本身的值。
这样会导致什么情况呢就是内存销毁的问题你这个函数传递的时候传递的是指针不是指针的地址。那么此时就会产生一种情况那就是getmemory函数运算结束这个函数进行了销毁。
因为他调用结束之后函数会进行销毁strcpy函数想拷贝到开辟的空间里面OK找不到空间了因为进行了销毁。
什么意思呢可以理解为
张三有一天忙碌完不想回家了在公司楼下开了个酒店住进去了哎很不错告诉李四我住的209房间特别好你有空可以去试试。第二天李四也累了那我也去了我到地方我就记得209房间但是张三的209房间已经退房了那我肯定进不去我非得进去那就被保安打一顿。
你这里也是这样你这里 想拷贝字符创那可以没问题。关键点在于你这里传递的是数值他不是地址那数值的话函数创建了然后运行结束进行销毁。你自然找不到房间号。你这里要是传递的是空间的地址那我可以直接去你的地址进行操作拷贝你也不需要进行返回什么的哪怕进行销毁了那也没事。
1.因为这里传参传递的是数值函数返回的时候进行了函数的销毁从而导致非法访问
这里的意思 应该是把100个字节放到str里面去 但是传值调用是不行的 会导致有问题
正确的处理应该是什么呢
我们可以把str取地址传参传的是地址然后因为本身str已经是指针我们采取用二级指针的方式进行接收也就是指向的是指针的地址
修改为正确代码1
此时就可以完成任务了 修改为正确代码2
当然 不喜欢二级指针 也可以进行数值的接受 也就是char*
找个数值进行接收找个数值进行接收那就是有返回类型我们采取的返回类型是char*类型因为这里是拷贝字符串。接收返回值也是一样的。 提示一下所以其实不传参也是可以的 图解