C语言中将字符串赋值给字符数组的问题
那么str1=“China”是不是错的?
char a[ ]='toyou'; 为什么是正确的呢?
那请问,不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组赋值。这句话能不能举几个简单的例子呢? 展开
char s[20];s="helo";这样错误的原因就是:不能用赋值语句将一个字符串常量直接给一个字符数组赋值。
char s[20];
char ss[]="hello";
s=ss;错误原因是:不能用赋值语句将一个字符数组直接给一个字符数组赋值
,即字符串的复制(c语言中,但是在c++的string 类,上面的赋值是正确的)必须用strcpy()函数实现。
而char a[ ]=”toyou“;正确的原因是:因为在声明数组变量的时候就是,为其开辟空间,并为其初始化,这样才是符合c语言语法的。
扩展资料:
C语言中字符串赋值的理解
一、指针式赋值
上面的示例是显然可以正常执行的,也是很容易理解的。但是下面这种方式就令人有点难以理解了。
通过程序的运行情况,我们可以知道:char *p = "hello";这种字符串的赋值方式是完全没有问题的。要理解这种赋值方式,我们首先得理解双引号(特别注意:这个是双引号,不要赋值的时候给弄了个单引号)在这个语句中做了什么工作。双引号主要做了3个工作,分别是:
(1)申请了空间(在常量区),存放了字符串。
(2)在字符串尾加上了“\0”。
(3)返回地址。
这里所返回的地址就赋值给了char *类型的指针变量p。
二、通过字符数组直接把字符串赋值。程序如下:
三、需要注意的一些问题
直接把字符串赋值给数组名(也就是数组首元素的首地址)是不行的。
需要初始化。
举例如下:
char s[20];s="helo";这样是错误的,原因就是不能用赋值语句将一个字符串常量直接给一个字符数组赋值。
char s[20];
char ss[]="hello";
s=ss;这也是错误的,原因是不能用赋值语句将一个字符数组直接给一个字符数组赋值
即字符串的复制(c语言中,但是在c++的string 类,上面的赋值是正确的)必须用strcpy()函数实现。
而char a[ ]=”toyou“那是因为我们在声明数组变量的时候就是,为其开辟空间,并为其初始化,这样才是符合c语言语法的。而上面的都是不符合语法的。
扩展资料
基本特性
1、高级语言:它是把高级语言的基本结构和语句与低级语言的实用性结合起来的工作单元。
2、结构式语言:结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。C 语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。
3、代码级别的跨平台:由于标准的存在,使得几乎同样的C代码可用于多种操作系统,如Windows、DOS、UNIX等等;也适用于多种机型。C语言对编写需要进行硬件操作的场合,优于其它高级语言。
4、使用指针:可以直接进行靠近硬件的操作,但是C的指针操作不做保护,也给它带来了很多不安全的因素。C++在这方面做了改进,在保留了指针操作的同时又增强了安全性,受到了一些用户的支持,但是,由于这些改进增加语言的复杂度,也为另一部分所诟病。Java则吸取了C++的教训,取消了指针操作,也取消了C++改进中一些备受争议的地方,在安全性和适合性方面均取得良好的效果,但其本身解释在虚拟机中运行,运行效率低于C++/C。一般而言,C,C++,java被视为同一系的语言,它们长期占据着程序使用榜的前三名。
参考资料:百度百科:C语言
举例如下:
char s[20];s="helo";这样是错误的,原因就是不能用赋值语句将一个字符串常量直接给一个字符数组赋值。
char s[20];
char ss[]="hello";
s=ss;这也是错误的,原因是不能用赋值语句将一个字符数组直接给一个字符数组赋值
即字符串的复制(c语言中,但是在c++的string 类,上面的赋值是正确的)必须用strcpy()函数实现。
而char a[ ]=”toyou“;为上面是正确呢???那是因为我们在声明数组变量的时候就是,为其开辟空间,并为其初始化,这样才是符合c语言语法的。而上面的都是不符合语法的。
这才是对的,要用双引号。
这种方式叫初始化,是可以的,"toyou"这个字符串放在数据区里,在编译阶段就确定了。
a作为数组名,它是一个常指针,不能改变所指向的地址,只能是&a[0]
所以你在非声明的地方用a="xxx",就相当于改变了常量的值,是不允许的。
int main()
{
char str[100];
char *p;
// str="不能将字符串常量赋值给数组"; //错误:字符串常量不可以赋值给数组,需要strcpy或者一个一个赋值
p="能将字符串常量赋值给指针"; //可以,该字符串常量将首地址赋值给p,注意:不可以用*p修改字符串常量的值
char a[]="可以将字符串直接初始化给数组"; //字符串常量可以初始化给数组,注意:只可以是初始化
printf("%s\n",p);
// *p='s'; //错误:*p所指内存是只读的,不可以修改。
printf("%s\n",a);
return 0;
}