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

#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'来给编译器指出何时停止,所以会产生数组越界错误

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值