在tc中这样可以么?

simclock 2003-08-20 09:13:19
定义一个字符串

char *str="";
...全文
182 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
jrhjrh 2003-08-22
  • 打赏
  • 举报
回复
编译时不出错
simclock 2003-08-22
  • 打赏
  • 举报
回复
to qhgary(Shining)
我那个BiTree 是指向BiNode的指针类型,然后我传过来的bst是bst的指针,所以我觉得应该是*bst阿
cxjddd 2003-08-22
  • 打赏
  • 举报
回复
其实char* str="string";是定义一个指针而不是定义一个字符串!
按照语法的来说,这个是定义了str。"string"只是早就在数据段里了,不是在这里定义的。只不过,str指向了"string"而已。
playboyxp 2003-08-22
  • 打赏
  • 举报
回复
可以这样写,编译可以通过
不过这样写好象没有意义
021850524 2003-08-21
  • 打赏
  • 举报
回复
to bm1408(嗔):
char *str;也是定义,也分配了内存呀.
只不过它的值可能是个随机的.
char *str="";是定义,它的值应该是指向静态存储区的.
不过最好应该在char *str;
前加上const,这样通用性好,否则有的编译器会报错.
simclock 2003-08-21
  • 打赏
  • 举报
回复
up
qhgary 2003-08-21
  • 打赏
  • 举报
回复
好的习惯就是
char* p = null;
用的时候再p = "...";
或者指向其他。
如果你碰到了Null pointer assignment,那只能说明你使用不小心,指针要分配了空间,才能用,出现这个错误是不应该的。不是char* p = null;的错。
你的下一个问题:
是不是应该这样
if (!(bst=(BiTree)malloc(sizeof(BiNode)))) return 0;
~~~等号右边是一个指针类型,所以左边应该也是一个指针类型,*bst表示这个指针的内容了
simclock 2003-08-21
  • 打赏
  • 举报
回复
up
simclock 2003-08-21
  • 打赏
  • 举报
回复
谁来回答一下儿我8楼的问题?谢谢

hillyee 2003-08-21
  • 打赏
  • 举报
回复
从语法上来说,这样写是没有错误的。

不过在实际编译的时候就要视编译器而定了,在tc中好象没有错误。
simclock 2003-08-21
  • 打赏
  • 举报
回复
up
simclock 2003-08-20
  • 打赏
  • 举报
回复
应该怎样写?请指点一下。我觉得我用指针的时候老是有不好的习惯。

比如定义一个指针int *a;我该不该给他赋值?如果直接用编译会有warning说没赋初值就直接用了。要是赋的话应该赋什么呢?赋NULL的话程序运行完会出Null pointer assignment。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
还有比如这个:
typedef struct BiNode {
char *keyword;
struct BiNode *lchild,*rchild;
}BiNode,*BiTree;

int CreatBST(BiTree *bst)
里有if (!((*bst)=(BiTree)malloc(sizeof(BiNode)))) return 0;
编译出warning说possibly incorrectly assignment in function CreatBST
bgu 2003-08-20
  • 打赏
  • 举报
回复
这样写程序是很不好一个现象!
GhostAdz 2003-08-20
  • 打赏
  • 举报
回复
这个是空串
地址肯定是分配的,通常应该放串的首地址
在这里只有\0,,只能放\0了
idontlikenickname 2003-08-20
  • 打赏
  • 举报
回复


语句char *str = "";属于定义字符串常量,虽然str没有有意义的内容但是编译器还是给str分配了1个字节的空间存放终止字符'\0'.
语句char *str;是定义一个字符指针,该指针变量的内容不定,但是str作为一个指针变量编译器是分配了内存给它的,要不怎么存储地址?
类似extern char *str;这样的语句才叫声明~~

bm1408 2003-08-20
  • 打赏
  • 举报
回复
这个问题我也很迷惑不解!

char *str;
这样属于声明!

char *str="";
这样属于定义!

按照道理,声明应该不分配内存,定义才分配内存!
simclock 2003-08-20
  • 打赏
  • 举报
回复
有人说这样没分配内存?

是不是说如果字符串特别长有可能会发生冲突?
oopig 2003-08-20
  • 打赏
  • 举报
回复
可以

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧