比如将s的内容复制到n
char *s="hello world";
char *n;
strcpy(n,s);
之后再打印n的内容,如果是printf("%s",n);的话 结果就是“hello world”
但是如果是逐个打印
for(int i=0;i<strlen(n);i++){
printf("%c",n[i]);
}
运行时会出现Segmentation fault: 11
(1) 对于指针必须初始化,char * n = NULL;
(2) 没有然后了
n都没有空间,我就不知道strcpy就不崩溃?
你可以在 strcpy()
之前加一句printf("%x\n", (int)n);
,你会发现未初始化的指针*n
指向一个随机地址。strcpy()
其实是向这个随机地址写入了字符串。
C里面对指针是不加检测的,所以用n
打印没问题。
而用n[i]
打印时,却会检查地址范围,所以出错了。
你的n根本没有分配空间,strcpy等于是强行往一段内存写入了数据,行为是不可预支的。所以不能直接访问。
需要对指针初始化,分配一块空间。
n没有分配空间,不能那样访问。