揭露谭浩强的错误-证实不能用字符指针变量做形参
来源:互联网 发布:淘宝账号违规了怎么办 编辑:程序博客网 时间:2024/05/22 10:35
谭浩强 《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[]所表示的字符串是可以修改的。
所以,将实参改成数组型即可,至于形参,使用数组和字符指针都可以。
- 揭露谭浩强的错误-证实不能用字符指针变量做形参
- 参数或变量不能用
- 威锋网-揭露ipad只能用原装充电器的秘密!
- sqlplus时不能用Backspace来删除字符的解决
- sqlplus时不能用Backspace来删除字符的解决
- c中数组大小不能用变量的一个解决办法
- java为什么定义的变量在main中不能用?
- C++ vector 和 struct都可以直接新建然后赋值(但是vector只能用变量,不能用指针)
- 字符指针与字符串变量的转换
- 指向字符型数据的指针变量。
- C语言中的指针错误——不能把不匹配的数据类型 赋给指针变量
- 不能用的文件名
- 字符指针变量
- 字符型指针变量与字符数组的区别
- 字符指针变量和字符数组的区别
- 字符指针变量和字符数组的区别:
- 字符型指针变量与字符数组的区别
- 字符型指针变量与字符数组的区别
- Ubuntu下彻底卸载mysql 与安装
- java重写equals()和hashcode()
- windows系统内置关机程序
- 常用邮箱的pop3,smtp以及imap服务器地址
- poj 3125.Printer Queue
- 揭露谭浩强的错误-证实不能用字符指针变量做形参
- 找回Oracle用户密码的方法
- How Google Test Software读书笔记(一)
- 数据库里类switch语句和三元运算符的使用(case)
- 安卓平台国内开发现状
- poj 1308.Is It A Tree?
- sql语法,也许你会用到的
- 深入浅出 - Android系统移植与平台开发(十四) - Sensor HAL框架分析之四
- How Google Test Software读书笔记(二)