字符串char *s;s={"abc"};为什么错误?

liuxu2559 2009-09-10 09:38:40
如题!
望各位知道的解释一下!
谢谢!
...全文
917 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
tail1013 2009-09-10
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 liangyonglou 的回复:]
引用 2 楼 brookmill 的回复:
虽然我们把char *s; 叫做字符串,本质上s是一个char类型的指针
"abc"也是一个char类型指针,它指向常量区的一段保存了abc的内存,所以可以写s=“abc"
但是{"abc"}不是指针,所以不能这么赋值

如果你的程序这么写
char *s;
s="abc";
会出问题的
[/Quote]

会出什么问题?
liuxu2559 2009-09-10
  • 打赏
  • 举报
回复
谢谢诸位!
liangyonglou 2009-09-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 brookmill 的回复:]
虽然我们把char *s; 叫做字符串,本质上s是一个char类型的指针
"abc"也是一个char类型指针,它指向常量区的一段保存了abc的内存,所以可以写s=“abc"
但是{"abc"}不是指针,所以不能这么赋值
[/Quote]
如果你的程序这么写
char *s;
s="abc";
会出问题的
brookmill 2009-09-10
  • 打赏
  • 举报
回复
我用gcc试了一下这段代码
struct pt
{
int x;
int y;
};
int main()
{
#if 1
char *s;
struct pt p;
// 这两行编译出错:error: expected expression before { token
s = {"abc"};
p = {1,2};
#else
// 这两行编译通过
struct pt p = {1,2};
char *s = {"abc"};
#endif
return 0;
}
brookmill 2009-09-10
  • 打赏
  • 举报
回复
s={"abc"};
编译器见到大括号{的时候,认为它开始了另一个代码块,但是这时候s=这个语句还没有结束,所以出错
eijikayn 2009-09-10
  • 打赏
  • 举报
回复
指针根本没有分配内存,肯定有问题,而且指针赋值也不是这样赋滴
brookmill 2009-09-10
  • 打赏
  • 举报
回复
虽然我们把char *s; 叫做字符串,本质上s是一个char类型的指针
"abc"也是一个char类型指针,它指向常量区的一段保存了abc的内存,所以可以写s=“abc"
但是{"abc"}不是指针,所以不能这么赋值
liangyonglou 2009-09-10
  • 打赏
  • 举报
回复
[Quote=引用楼主 liuxu2559 的回复:]
如题!
望各位知道的解释一下!
谢谢!
[/Quote]
这样写实不对的,你可以做个试验,将先后的S的地址输出就知道了,建议写成 char s[]="abc" 或者
char *s;
s=(char *)malloc();
strncpy(s,"abc",strlen("abc"));

69,369

社区成员

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

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