由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 问个字符串的基本问题
相关主题
strcat()what's wrong with this C++ code?
谁来解释一下这个是compiler问题吗?[合集] 简单问题一个:为什么可以间接访问私有指针成员
弱问c++里有没有NULL这个keyword?问个C++问题,高手帮帮忙
数组问题问个关于c++的问题
请教一个基础C++问题问个虚函数的作用
求GCC高手问个virtual table 的问题
请问这个C++程序有什么问题吗C array
问一个C++函数Parameter的问题A C++ compiler related interview question
相关话题的讨论汇总
话题: cp话题: char话题: hello话题: compiler话题: 字符串
进入Programming版参与讨论
1 (共1页)
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";
: 等等,都会有

1 (共1页)
进入Programming版参与讨论
相关主题
A C++ compiler related interview question请教一个基础C++问题
g++ default optimization error求GCC高手
A tech question (转载)请问这个C++程序有什么问题吗
An interesting C++ compile error问一个C++函数Parameter的问题
strcat()what's wrong with this C++ code?
谁来解释一下这个是compiler问题吗?[合集] 简单问题一个:为什么可以间接访问私有指针成员
弱问c++里有没有NULL这个keyword?问个C++问题,高手帮帮忙
数组问题问个关于c++的问题
相关话题的讨论汇总
话题: cp话题: char话题: hello话题: compiler话题: 字符串