发现一个c语言中用字符数组和char型指针管理字符串一个很容易搞混的地方

来源:互联网 发布:for循环鸡兔同笼编程 编辑:程序博客网 时间:2024/05/29 07:35
#include <stdio.h>#include <string.h>int main(){char a = 'c';char * p = &a;strcpy(p, "hello");printf("%s", p);return 0;}


这里是在使用strcpy()函数时发现的,这里尤其要注意strcpy()函数作用是用于拷贝数组,也就是要求目的对象应该有自己足够的空间用于储存新拷贝的字符串,而像上面给出的这种情形会发生  ""segmentation fault""的错误


由于p是一个指向字符串的地址,所以直接将"hello"拷贝给p,就会有可能p根本存储不下"hello",也有可能让p的值变成一个随机地址,解引用时就会发生不明确的错误,而在使用printf()函数打印字符串时,由于地址为p的内存的后面很长一段都可能没有  空字符'\0'来给编译器指出何时停止,所以会产生数组越界错误

1 0
原创粉丝点击