to xyouke(幽客):
这样做是有问题的,结果是没有定义的,搞不好系统会崩溃的。
必须理解到,在c中是没有其它语言中字符串这样的类型的,所谓的字符串只是一个字符数组,或者是一个字符指针而已。因此,p="hello"并不是将"hello"的内容拷贝到p指向的空间,而是让字符指针p从指向分配到的内存,变为指向"hello",后面的free(p)并没有释放通过malloc取得的内存,释放不是通过malloc取得的内存,其后果是没有定义的。
你可以将printf("%s\n",p)改为printf(%p:%s\n",p,p),看看整个过程中p指针的值证实这点。你应该通过strcpy实现字符串的拷贝。
to 楼主:
C++中的标准库文件是没有后缀的,但是在这些头文件中定义的内容都属于namespace std的,这是C++中的内容,和高手不高手没有关系。在C++中,为了与C兼容,传统的.h方式的头文件还是可以用的。我看楼主的程序是C程序,还是用.h方式为好。