各位c语言大佬帮忙看一下这个程序哪里有问题?
#include<stdio.h>intmain(void){voidcop(char*a,char*b);char*from="Ilovechina";char*to=...
# include<stdio.h>
int main(void)
{
void cop(char *a,char *b);
char *from="I love china";
char *to="I am a student";
printf("string from=%s\nstring to=%s\n",from,to); //输出字符串
cop(from,to); //调用cop函数把from中的字符逐个复制到to中
printf("string to=%s",to); //输出复制后的字符串
return 0;
}
void cop(char *a,char *b)
{
for (;*a!='\0';a++,b++)
*b=*a;
*b='\0';
}
把char *to="I am a student";改成char arr[]="I am a student";char *to=arr;程序就没问题了,这是为啥? 展开
int main(void)
{
void cop(char *a,char *b);
char *from="I love china";
char *to="I am a student";
printf("string from=%s\nstring to=%s\n",from,to); //输出字符串
cop(from,to); //调用cop函数把from中的字符逐个复制到to中
printf("string to=%s",to); //输出复制后的字符串
return 0;
}
void cop(char *a,char *b)
{
for (;*a!='\0';a++,b++)
*b=*a;
*b='\0';
}
把char *to="I am a student";改成char arr[]="I am a student";char *to=arr;程序就没问题了,这是为啥? 展开
展开全部
字符串字面值常量不可以修改。而字符数组可以修改。
养成将字符串字面值常量声明为const的好习惯,可以避免你犯这样的错误,因为试图修改会在编译时就报错。
const char *from="I love china"; // 字符串字面值常量不可以修改,声明为const
char from[]="I love china"; //字符数组可以修改
更多追问追答
追问
追答
用双引号引起来的内容,就叫做字符串字面值常量。"I am a student"就是一个字符串字面值常量。
char *to="I am a student"; 定义一个指针to,令它指向字符串字面值常量"I am a student"的首地址。这种写法是不规范的,因为用户可以通过指针to修改其指向的内容,这违背了字符串字面值常量不可修改的原则,可能导致程序运行时异常(也就是你的程序崩溃的原因)。因此,规范的写法应该是const char *to="I am a student"; 将指针to定义为常量指针,杜绝了用户通过该指针修改其所指内容的可能性。
2019-08-12
展开全部
你的代码在vc++6.0中可以运行;在vs2017中提示要加const,估计与c11标准有关
更多追问追答
追问
我刚开始学,c11要求了我就照着做吧,但是现在的问题和c11没什么关系,在VC++6.0都没搞懂的问题。
追答
我建议你加const,c语言二级辅导书里面说不加const合法.(在vc++6.0中的确是这样)但在vs2017中,必须加const,因为char *a="wwww";这里wwww的类型是const char *类型.就会报错
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询