字符串表示形式—字符数组和字符指针的区别

本文对比分析了C语言中两种不同的字符串初始化方式:通过指针指向字符串常量和定义字符数组。探讨了这两种方式在内存分配、修改能力及生命周期方面的区别,并通过示例代码展示了如何正确地进行字符串复制。

Char *p1 = “A String.” 和 char p2[] = “another String.” 写法的不同

p1指向的这个字符串是个常量, 不可改变。 程序在编译期间就为"A String."这个字符串分配了固定的空间, 它被存储在全局静态区中. 编译器只是把指针p1的指向的地址赋为“A String.”的首地址,并没有为指针p1指向的地址分配可供操作的内存(除非使用malloc),如果试图改变p1指向的字符串,则会出错(试图改变不可写内存内容的错误)。

而p2是个变量, 其内容可以被更新和改变, p2可以理解为一个不可改变其指向位置的指针, 即char * const p2, 它所占用的内存在程序运行时被自动分配和释放, 而p1占用的内存要等到整个程序结束时才被释放. 编译器为数组b分配了可供操作的存储空间.

C代码 复制代码
  1. #include <stdio.h>   
  2.   
  3. void main()    
  4. {   
  5.     void copy_string(char *si, char *di);   
  6.     char *ss,*dd;   
  7.     char from[] = "I am a student.";   
  8.     char to[]   = "You are a teacher.";   
  9.   
  10.     ss = "I am a student.";   
  11.     dd = "You are a teacher.";   
  12.        
  13.     printf("a:%s/nb:%s/n",ss,dd);   
  14.     copy_string(ss,to); //这样写没有问题   
  15.     //copy_string(ss,dd); //有问题   
  16.     //copy_string(from,to);//没问题   
  17.     printf("/n");   
  18.     printf("a:%s/nb:%s/n",ss,to);   
  19. }   
  20.   
  21. void copy_string(char *si, char *di)   
  22. {   
  23.     for(; *si != '/0'; si++,di++)   
  24.         *di = *si;   
  25.     *di = '/0';   
  26. }  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值