当前位置:编程学习 > C/C++ >>

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++最小生成树,求全代码

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,