首页 > 编程知识 正文

c十十语言的递归函数,python语言的输入函数是

时间:2023-05-04 04:09:20 阅读:239032 作者:67

先看一个代码:

#include <stdio.h> #include <string.h>typedef struct T{ char *name; int num;}test; int main(){ test *p = (test*)malloc(sizeof(test)); strcpy(p->name,"jim"); printf("%sn",p->name); return 0; }以上程序运行的时候,编译没问题,但会出现崩溃,原因在于 strcpy(p->name,"jim");因为 test *p = malloc()只是创建了对象的大小,并没有使 p 中的name变量指向一段可用地址,因为malloc()创建时,由于 对象 struct T中的 name 是指针,只有4个字节大小,并且没有指向,所以是个 野指针 ,所以往野指针赋值很容易会出现程序崩溃的。


要修改的话,只要把:

typedef struct T{ char name[20]; //指针改成数组即可 int num;}test;或者:

typedef struct T{ char *name; int num;}test; int main(){ test *p = (test*)malloc(sizeof(test)); p->name= (char*)malloc(50); strcpy(p->name,"hello world"); printf("%sn",p->name); return 0; }改成这样也可以,只要给结构体的 name指针 指向一段可取的内存就没问题了。



但现在又有一个问题:

因为下面的代码又没有问题的:

int main(){char *name;strcpy(name,"vincent");printf("%sn",name); return 0; }这里char *name 也是野指针,但为什么又不会出现问题呢?

这样写也是不应该的,因为往野指针赋值始终都有危险,因为不知道会往哪里赋值,估计这里不会出问题是跟编译器有关,但最好不要这样做,因为这是一个潜在的BUG。
记住:不能往野指针赋值!



版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。