d*****e 发帖数: 47 | 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'字符?是碰巧这片区域
都是空字符?请问以上初始化字符串的时候到底是初始化几个字符?
小弟菜鸟,还望各位前辈多包涵指教 |
m******t 发帖数: 4077 | 2
'\
这个应该是碰巧把?我写了一个小程序测试了一下,只有最后一个是'\0'.
【在 d*****e 的大作中提到】 : 请问无论通过何种方式创建字符串,compiler都会在末尾加上一个或多个的null字符'\ : 0',这样说对么? : 即无论是在堆,栈还是常量区: : char *cp = new char[5]; : cp = "hello"; : 或者 : char *cp = "hello"; : 或者 : char cp[] = "hello"; : 等等,都会有
|
D*********s 发帖数: 555 | 3
'\
你这两句连着写就注定要内存泄漏了,而且你第一句话分配的5个字节内存只能存放长度
小于等于4的C字符串,放"hello"是不行的。
【在 d*****e 的大作中提到】 : 请问无论通过何种方式创建字符串,compiler都会在末尾加上一个或多个的null字符'\ : 0',这样说对么? : 即无论是在堆,栈还是常量区: : char *cp = new char[5]; : cp = "hello"; : 或者 : char *cp = "hello"; : 或者 : char cp[] = "hello"; : 等等,都会有
|
d*****e 发帖数: 47 | 4 Thanks for pointing out
is it true that all character arrays will be automatically appended a '\0'?
长度
【在 D*********s 的大作中提到】 : : '\ : 你这两句连着写就注定要内存泄漏了,而且你第一句话分配的5个字节内存只能存放长度 : 小于等于4的C字符串,放"hello"是不行的。
|
k****f 发帖数: 3794 | 5 先要明确谁来填0,
【在 d*****e 的大作中提到】 : Thanks for pointing out : is it true that all character arrays will be automatically appended a '\0'? : : 长度
|
d*****e 发帖数: 47 | 6 compiler?难道得自己来填?
比如说
char cp[6] = {'h', 'e', 'l', 'l', 'o', '\0'};
这样?
还是
char cp[6] = "hello";
就行?
还请不吝赐教
【在 k****f 的大作中提到】 : 先要明确谁来填0,
|
k****f 发帖数: 3794 | 7 char cp[6]="hello";当然是编译器自动给补个0
【在 d*****e 的大作中提到】 : compiler?难道得自己来填? : 比如说 : char cp[6] = {'h', 'e', 'l', 'l', 'o', '\0'}; : 这样? : 还是 : char cp[6] = "hello"; : 就行? : 还请不吝赐教
|
j****r 发帖数: 28 | 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"; : 就行? : 还请不吝赐教
|
j********e 发帖数: 7 | 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. |
c********x 发帖数: 84 | 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"; : 等等,都会有
|