C++中字符串与字符数组问题
#include <stdio.h>
void copy_string(char *from,char *to)
{
for (;(*from)!='\0';from++,to++)
{ *to = *from; }
*to='\0';
}
int main()
{
char a[] = "I am a teacher.";//这一句将a[]改成*a就出错
char b[]= "You are a student.";//同上
printf("\nstring a = %s",a);
printf("\nstring b = %s",b);
copy_string(a,b);
printf("\nresult string a = %s",a);
printf("\nresult string b = %s",b);
return 0;
}
请看注释,请问这是为什么
答案:
#include <stdio.h>
void copy_string(char *from,char *to)
{
for (;(*from)!='\0';from++,to++)
{
*to = *from;
}
*to='\0';
}
int main()
{
char *a = "I am a teacher.";//将a[]改成a*是没事的,但不能把b[]改成b*
char b[]= "You are a student.";//因为你在函数里是要改变字符串b的值的...
//用*b来就是让你的字符串成了静态的字符串数组,就不能再被更改了
printf("\nstring a = %s",a);
printf("\nstring b = %s",b);
copy_string(a,b);
printf("\nresult string a = %s",a);
printf("\nresult string b = %s",b);
return 0;
}char *a = "I am a teacher.“;//这里的"I am a teacher."是一个const 型的。相当于下面两句
const char temp[] = "I am a teacher.“;
char *a = temp;
调试结果是什么?
指针不能这样直接用常量赋值。你将语句改动一下:
char a[] = "I am a teacher.";//这一句将a[]改成*a就出错
改成:
1)
char *const a = "I am a teacher.";
或
2)
char *a;
a="I am a teacher.";
如果是用指针的话,那你必须给他申请一段空间用来存放字符串,C语言里好像是用malloc函数,而且如果你一定要用指针,那么main函数上面的复制函数也要改啊,那种形式只适用于字符数组,用指针的话,连编译都过不了的,我帮你改了,代码传不上去啊!!!
上一个:用C++的STL的Any库如何改进程序?
下一个:C++最小生成树,求全代码