关于字符串指针的初始化

再战江湖之2023 2008-07-12 04:18:33
如果要初始化一个字符串有两种写法:
1:char *p = "hello";
2:char *p; p = "hello";
这两种写法有没有错的,是否有区别。
谭浩强c程序设计p238说是一样的,大家讨论一下吧
...全文
334 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
cpuwolf 2008-07-15
  • 打赏
  • 举报
回复
一样
载舟之水 2008-07-15
  • 打赏
  • 举报
回复
一样的,但是我认为代码区是可以修改的,至少是在Windows平台是可以的。
Reallyu 2008-07-14
  • 打赏
  • 举报
回复
这两种写法是一样的, 我指的不一样是比如在keil C和windows下你写的这两段代码,在keil C下不能修改代码区,在windows下也不能修改并且会弹出一个非法操作的对话框.但是在有些平台下可能能够修改代码区(或者可能编译器没有把字符串放在代码区).但是这两种写法是一样的,都是p指向个放在代码区的字符串是.我多嘴了,可能让你有混淆.
Reallyu 2008-07-13
  • 打赏
  • 举报
回复
一样的,但是也看编译器和运行环境,这样定义一般情况下p指针指向的地址是代码区/只读区,所以再写p[0] = 'x';编译可通过,运行的时候会出现错误. 但是在另外的编译器/运行环境有可能编译和运行都没有错误
  • 打赏
  • 举报
回复
#define uchar unsigned char

int main(void)
{
uchar *p = "hello";;

*p = '1';

while(1)
{

}
}

#define uchar unsigned char

int main(void)
{
uchar *p;
p = "hello";

*p = '1';

while(1)
{

}
}
我在keil里边软仿真了一下,这两种写法结果都不能修改p指向的第一个字符,那么是不是说是一样的呢?
REALLYU兄说会出现错误,会出现什么错误呢?
代码区不是不能修改吗,即使试图修改了也不会成功的,那么会有什么危险呢?
91program 2008-07-12
  • 打赏
  • 举报
回复
一样

19,519

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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