
c语言字符型和字符串型的区别?
我是初学者,书上有这么一段:“不要将字符常量与单字符的字符串常量混淆。例如:charc;c='a';是正确的,而c="a"是错误的;c="abcd"也是错误的。为什么最后...
我是初学者,书上有这么一段:“不要将字符常量与单字符的字符串常量混淆。例如:
char c;
c='a';是正确的,而
c="a"是错误的;
c="abcd"也是错误的。
为什么最后一个错误啊?声明字符串常量是不是不能用"char"啊?应该用什么?
请问,打印字符型的时候,printf("%c/n,"c1),如果是打印字符串型,那个%c应该改成什么呢???
(另外请帮我看看这个问题,http://zhidao.baidu.com/question/23077695.html回答好了追加10分) 展开
char c;
c='a';是正确的,而
c="a"是错误的;
c="abcd"也是错误的。
为什么最后一个错误啊?声明字符串常量是不是不能用"char"啊?应该用什么?
请问,打印字符型的时候,printf("%c/n,"c1),如果是打印字符串型,那个%c应该改成什么呢???
(另外请帮我看看这个问题,http://zhidao.baidu.com/question/23077695.html回答好了追加10分) 展开
12个回答
展开全部
在ANSI C中,初始化指针时所创建的字符串常量被定义为只读。
如果试图通过指针修改这个字符串的值,程序就会出现未定义的行为。
在有些编译器中,字符串常量被存放在只允许读取的文本段中,以防止它被修改。
数组也可以用字符串常量进行初始化:
Char a[]=”abcdefg”;
如指针相反,由字符串常量初始化的数组是可以修改的。其中的单个字符在以后可以改变。
如下:
(1)修改指针字符串中的数据
[cpp] view plaincopy
#include <string.h>
#include <stdio.h>
int main(){
char *buf="ABCDEFG";
printf("buf=%c\n",buf[2]);
buf[2]='M';
printf("end!\n");
}
编译通过了,但是会看到程序运行时出错了
(2)修改数组字符串中的数据
[cpp] view plaincopy
#include <string.h>
#include <stdio.h>
int main(){
char buf[]="ABCDEFG";
printf("buf=%c\n",buf[2]);
buf[2]='M';
printf("buf=%s\n",buf);
printf("end!\n");
}
可以看到程序运行正常.
如果试图通过指针修改这个字符串的值,程序就会出现未定义的行为。
在有些编译器中,字符串常量被存放在只允许读取的文本段中,以防止它被修改。
数组也可以用字符串常量进行初始化:
Char a[]=”abcdefg”;
如指针相反,由字符串常量初始化的数组是可以修改的。其中的单个字符在以后可以改变。
如下:
(1)修改指针字符串中的数据
[cpp] view plaincopy
#include <string.h>
#include <stdio.h>
int main(){
char *buf="ABCDEFG";
printf("buf=%c\n",buf[2]);
buf[2]='M';
printf("end!\n");
}
编译通过了,但是会看到程序运行时出错了
(2)修改数组字符串中的数据
[cpp] view plaincopy
#include <string.h>
#include <stdio.h>
int main(){
char buf[]="ABCDEFG";
printf("buf=%c\n",buf[2]);
buf[2]='M';
printf("buf=%s\n",buf);
printf("end!\n");
}
可以看到程序运行正常.

你对这个回答的评价是?
展开全部
字符变量
字符变量的取值是字符常量,即单个字符。字符变量的类型说明符是char。字符变量类型说明的格式和书写规则都与整型变量相同。
例如:
char a,b; 每个字符变量被分配一个字节的内存空间,因此只能存放一个字符。字符值是以ASCII码的形式存放在变量的内存单元之中的。
字符串常量
字符串常量是由一对双引号括起的字符序列。例如: "CHINA" ,"C program:" , "$12.5" 等都是合法的字符串常量。字符串常量和字符常量是不同的量。它们之间主要有以下区别:
1.字符常量由单引号括起来,字符串常量由双引号括起来。
2.字符常量只能是单个字符,字符串常量则可以含一个或多个字符。
3.可以把一个字符常量赋予一个字符变量,但不能把一个字符串常量赋予一个字符变量。在C语言中没有相应的字符串变量。
这是与BASIC 语言不同的。但是可以用一个字符数组来存放一个字符串常量。在数组一章内予以介绍。
4.字符常量占一个字节的内存空间。字符串常量占的内存字节数等于字符串中字节数加1。增加的一个字节中存放字符"\0"(ASCII码为0)。这是字符串结束的标志。例如,字符串 "C program"在内存中所占的字节为:C program\0。字符常量'a'和字符串常量"a"虽然都只有一个字符,但在内存中的情况是不同的。
'a'在内存中占一个字节,可表示为:a
"a"在内存中占二个字节,可表示为:a\0符号常量..................
字符变量的取值是字符常量,即单个字符。字符变量的类型说明符是char。字符变量类型说明的格式和书写规则都与整型变量相同。
例如:
char a,b; 每个字符变量被分配一个字节的内存空间,因此只能存放一个字符。字符值是以ASCII码的形式存放在变量的内存单元之中的。
字符串常量
字符串常量是由一对双引号括起的字符序列。例如: "CHINA" ,"C program:" , "$12.5" 等都是合法的字符串常量。字符串常量和字符常量是不同的量。它们之间主要有以下区别:
1.字符常量由单引号括起来,字符串常量由双引号括起来。
2.字符常量只能是单个字符,字符串常量则可以含一个或多个字符。
3.可以把一个字符常量赋予一个字符变量,但不能把一个字符串常量赋予一个字符变量。在C语言中没有相应的字符串变量。
这是与BASIC 语言不同的。但是可以用一个字符数组来存放一个字符串常量。在数组一章内予以介绍。
4.字符常量占一个字节的内存空间。字符串常量占的内存字节数等于字符串中字节数加1。增加的一个字节中存放字符"\0"(ASCII码为0)。这是字符串结束的标志。例如,字符串 "C program"在内存中所占的字节为:C program\0。字符常量'a'和字符串常量"a"虽然都只有一个字符,但在内存中的情况是不同的。
'a'在内存中占一个字节,可表示为:a
"a"在内存中占二个字节,可表示为:a\0符号常量..................
参考资料: http://www.bc-cn.net/Article/kfyy/cyy/jc/200409/2_4.html
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |