mysqljava217
nimo_096
采纳率50%
2015-09-15 06:47 浏览 1.8k
已采纳

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条回答 默认 最新

  • 已采纳
    shangguanyuanxia shangguanyuanxia 2015-09-15 07:58

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

    点赞 评论 复制链接分享
  • Tiger_Zhao Tiger_Zhao 2015-09-15 07:14

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

    点赞 1 评论 复制链接分享
  • u013251457 斝樂 2015-09-15 07:09

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

    点赞 评论 复制链接分享
  • oyljerry oyljerry 2015-09-15 07:29

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

    点赞 评论 复制链接分享
  • u013346305 LUCKEYMAN 2015-09-15 10:46

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

    点赞 评论 复制链接分享
  • chaobo_lu 零度永恒 2015-09-18 09:30

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

    点赞 评论 复制链接分享

相关推荐