memset(&str, 0, sizeof(str))对结构体成员进行初始化,是没有问题的,int型会被初始化成0,char型会被初始化成0。0有多种解释方法,可以是数字0,也可以是字符串结束符号\0,当然,也可以是NULL。但是,有一个问题,并不是所有的操作系统,所有的编译器都将0当做字符串结束符合和指针的NULL的。你把0当做NULL用,在特定的系统下是没问题的,但可移植性就差了。
初始化没错,不过不是空指针的值,是整个这个结构体变量所占据的内存所有字节都置零了。