关于c语言字符指针变量指向字符串常量的疑问 10
谭浩强牛人c语言程序设计的一段实例代码如下:#include<stdio.h>voidcopy_string(charfrom[],charto[]){inti=0;wh...
谭浩强牛人c语言程序设计的一段实例代码如下:
#include <stdio.h>
void copy_string(char from[], char to[])
{
int i = 0;
while(from[i] != '\0')
{
to[i] = from[i];
i++;
}
to[i] = '\0';
}
void main()
{
char *a = "I'm a teacher.";
char *b = "You are a student.";
printf("string a = %s\nstring b = %s\n", a, b);
copy_string(a, b);
printf("string a = %s\nstring b = %s\n", a, b);
}
vc6.0下编译语法无错误,但是运行时出错。
不知道书上的c是什么版本的。
个人理解vc6.0版本 *a和*b指向字符串常量首字符地址,指向的内容不能更改,所有出内存单元是只读的错误,不知6.0以前是不是没有这个限制? 展开
#include <stdio.h>
void copy_string(char from[], char to[])
{
int i = 0;
while(from[i] != '\0')
{
to[i] = from[i];
i++;
}
to[i] = '\0';
}
void main()
{
char *a = "I'm a teacher.";
char *b = "You are a student.";
printf("string a = %s\nstring b = %s\n", a, b);
copy_string(a, b);
printf("string a = %s\nstring b = %s\n", a, b);
}
vc6.0下编译语法无错误,但是运行时出错。
不知道书上的c是什么版本的。
个人理解vc6.0版本 *a和*b指向字符串常量首字符地址,指向的内容不能更改,所有出内存单元是只读的错误,不知6.0以前是不是没有这个限制? 展开
2个回答
展开全部
错误原因:a、b是字符指针,它们指向常量字符串。当你把它们作为参数传递给函数copy_string时,函数所做的操作就是改变b所指向的字符串的值,所以错误。你要知道常量字符串时不能改变值的(这涉及到存储位置的知识,常量字符串存储在常量区,就像const声明的常量一样,改变它的值就是非法的),你只能改变b,让其指向其他字符串。
修正方法:将b改为长度适宜的字符数组。
修正方法:将b改为长度适宜的字符数组。
更多追问追答
追问
那谭浩强书上的不知道在什么c版本下编译运行的?还是就错了
追答
是不是你把函数定义中的形参定义和主函数中的实参定义看反了?如果没有的话, 那就是书错了。不管哪个编译器,这个规则是一样的,都会出现内存不可写的错误。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询