揭露谭浩强的错误-证实不能用字符指针变量做形参

谭浩强  《C程序设计第三版》 第255页 例10.19 有如下程序:

功能是将a字符串复制到b,并输出两个字符串。

#include<stdlib.h>
#include<stdio.h>
void copy_string(char *from,char *to)
{
  for(;*from!='\0';)
      *to++=*from++;  
   *to='\0';  
}
int main()
{
char *a="I am teacher.";
char *b="you are a student.";
printf("string a=%s\nstring b=%s\n",a,b);
copy_string(a,b);
printf("\nstring a=%s\nstring b=%s\n",a,b);
system("pause");
}


老先生说得信誓旦旦,并在第257页作了总结,说 实参可以为字符指针变量。

奈何调试没成功。发现原因如下:

char *a = "I am a teacher.";   
char *b = "You are a student.";


a,b保存的是常量数据区地址,a,b指向的内容不能被修改
所以你函数里面的赋值是不起作用的.
改成这样

char a[] = "I am a teacher.";   
char b[] = "You are a student.";


字符串传给字符数组,a,b保存的是栈区地址,这样传进函数就可以修改其内容了.

简单地说,char * 和char[]都可以用来表示字符串,但两者有很大的不同。

其中最主要的不同就是char *所表示的字符串,是不能修改的,而char[]所表示的字符串是可以修改的。

所以,将实参改成数组型即可,至于形参,使用数组和字符指针都可以。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值