C语言的strcpy函数 拷贝之后再打印

比如将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

6个回答

(1) 对于指针必须初始化,char * n = NULL;
(2) 没有然后了

你可以在 strcpy()之前加一句printf("%x\n", (int)n);,你会发现未初始化的指针*n指向一个随机地址。
strcpy()其实是向这个随机地址写入了字符串。
C里面对指针是不加检测的,所以用n打印没问题。
而用n[i]打印时,却会检查地址范围,所以出错了。

n都没有空间,我就不知道strcpy就不崩溃?

你的n根本没有分配空间,strcpy等于是强行往一段内存写入了数据,行为是不可预支的。所以不能直接访问。

需要对指针初始化,分配一块空间。

n没有分配空间,不能那样访问。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问