avatar
问个字符串的基本问题# Programming - 葵花宝典
d*e
1
请问无论通过何种方式创建字符串,compiler都会在末尾加上一个或多个的null字符'\
0',这样说对么?
即无论是在堆,栈还是常量区:
char *cp = new char[5];
cp = "hello";
或者
char *cp = "hello";
或者
char cp[] = "hello";
等等,都会有
cp[5] == '\0';
对吧?(用g++编译运行结果是)
我有检查了一下cp[6], cp[7], ..., cp[100],怎么也都是'\0'字符?是碰巧这片区域
都是空字符?请问以上初始化字符串的时候到底是初始化几个字符?
小弟菜鸟,还望各位前辈多包涵指教
avatar
m*t
2

'\
这个应该是碰巧把?我写了一个小程序测试了一下,只有最后一个是'\0'.

【在 d*****e 的大作中提到】
: 请问无论通过何种方式创建字符串,compiler都会在末尾加上一个或多个的null字符'\
: 0',这样说对么?
: 即无论是在堆,栈还是常量区:
: char *cp = new char[5];
: cp = "hello";
: 或者
: char *cp = "hello";
: 或者
: char cp[] = "hello";
: 等等,都会有

avatar
D*s
3

'\
你这两句连着写就注定要内存泄漏了,而且你第一句话分配的5个字节内存只能存放长度
小于等于4的C字符串,放"hello"是不行的。

【在 d*****e 的大作中提到】
: 请问无论通过何种方式创建字符串,compiler都会在末尾加上一个或多个的null字符'\
: 0',这样说对么?
: 即无论是在堆,栈还是常量区:
: char *cp = new char[5];
: cp = "hello";
: 或者
: char *cp = "hello";
: 或者
: char cp[] = "hello";
: 等等,都会有

avatar
d*e
4
Thanks for pointing out
is it true that all character arrays will be automatically appended a '\0'?

长度

【在 D*********s 的大作中提到】
:
: '\
: 你这两句连着写就注定要内存泄漏了,而且你第一句话分配的5个字节内存只能存放长度
: 小于等于4的C字符串,放"hello"是不行的。

avatar
k*f
5
先要明确谁来填0,

【在 d*****e 的大作中提到】
: Thanks for pointing out
: is it true that all character arrays will be automatically appended a '\0'?
:
: 长度

avatar
d*e
6
compiler?难道得自己来填?
比如说
char cp[6] = {'h', 'e', 'l', 'l', 'o', '\0'};
这样?
还是
char cp[6] = "hello";
就行?
还请不吝赐教

【在 k****f 的大作中提到】
: 先要明确谁来填0,
avatar
k*f
7
char cp[6]="hello";当然是编译器自动给补个0

【在 d*****e 的大作中提到】
: compiler?难道得自己来填?
: 比如说
: char cp[6] = {'h', 'e', 'l', 'l', 'o', '\0'};
: 这样?
: 还是
: char cp[6] = "hello";
: 就行?
: 还请不吝赐教

avatar
j*r
8
This is OK:
char cp[6] = "hello" //C compiler automatically adds '\0' to the end
This is Ok too:
char cp[6] = {'h', 'e', 'l', 'l','o'}
In C, if you don't specify all the elements in the definition, remaining
elements are set to 0.
One more example:
int arr[2] = { 1 };
Now arr[1] is equal to 0.
Hope it makes sense

【在 d*****e 的大作中提到】
: compiler?难道得自己来填?
: 比如说
: char cp[6] = {'h', 'e', 'l', 'l', 'o', '\0'};
: 这样?
: 还是
: char cp[6] = "hello";
: 就行?
: 还请不吝赐教

avatar
j*e
9
Just want to point out one thing different in C and C++:
char buf[5] ="12345";
is legal C , but invaliad C++. So if you don't have enough room in the
character array for trailing \0, you can get away with a C compiler. But you
access resulting array at your own risk.
avatar
c*x
10
no, you have to stuff null, new line char by yourself.

'\

【在 d*****e 的大作中提到】
: 请问无论通过何种方式创建字符串,compiler都会在末尾加上一个或多个的null字符'\
: 0',这样说对么?
: 即无论是在堆,栈还是常量区:
: char *cp = new char[5];
: cp = "hello";
: 或者
: char *cp = "hello";
: 或者
: char cp[] = "hello";
: 等等,都会有

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。