c语言小问题

henujava 2012-02-14 02:30:10
#include<stdio.h>
int main(int argc, char *argv)
{
char *s="AAA";
printf("%s",s);
s[0] = 'B';(此处出现了异常,为什么呢)
printf("%s",s);
}
...全文
185 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
DyanWang 2012-02-15
  • 打赏
  • 举报
回复
char *s="AAA";
s指向的空间在代码区,不可以对代码区的内容进行更改。

如果是char s[]= "AAA";
s[0] = 'B' //这样是可以的,此时的是在栈区分配空间存放字符串
yushanjuan 2012-02-15
  • 打赏
  • 举报
回复
哇,小胖墩终于找到组织了。大学时就很喜欢学C语言啊,特别喜欢谭浩强老师编著的《C程序设计》。
VS 2012-02-15
  • 打赏
  • 举报
回复
我还没弄明白命令行变元如何用呢
querdaizhi 2012-02-15
  • 打赏
  • 举报
回复
char *s="AAA";
s作为一个指针指向一个字符串常量“AAA”,字符串常量是不可修改的。
可以使用字符数组char s[] = "AAA";
tusong86 2012-02-15
  • 打赏
  • 举报
回复
char *s="AAA";这个语句是这样一个意思,首先系统会在只读存储区里面分配一块空间(4个字节),将3个'A'和一个'\0'放在里面,然后定义一个指向char型的指针,让该指针指向刚刚分配的只读存储区,只读存储区也是内存的一部分,由于只读存储区里面的值是不能改动的,所以通过改动s所指向的只读存储区会导致非法内存访问,也就是通常所说的段错误。系统分配的那块只读存储区也可以用"AAA"来索引,你可以在程序里面执行这样一条语句,printf("%c\n", "AAA"[0]);,那么结果就是这个只读存储区的第一个字母。
mzlogin 2012-02-14
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 dock_wang 的回复:]

你没分清堆和栈
[/Quote]
这个...和堆无关.

王健龙 2012-02-14
  • 打赏
  • 举报
回复
你没分清堆和栈
ProgrammingRing 2012-02-14
  • 打赏
  • 举报
回复
s指向常量区……
AnYidan 2012-02-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wy1043759728 的回复:]
常量字符串不可以修改
[/Quote]
修改常量字符串是未定义的行为
wy1043759728 2012-02-14
  • 打赏
  • 举报
回复
常量字符串不可以修改
三文鱼 2012-02-14
  • 打赏
  • 举报
回复
楼上正解
面包大师 2012-02-14
  • 打赏
  • 举报
回复
"AAA"是个常量字符串,然后char *s="AAA";是让s指向了这个字符串的首地址,是一段不可写的内存
赵4老师 2012-02-14
  • 打赏
  • 举报
回复
#pragma comment(linker,"/SECTION:.rdata,RW")
开头加这句可以让常量区可写。
IVERS0N 2012-02-14
  • 打赏
  • 举报
回复
char *s="AAA"; 常量字符串 此串不可以修改

70,037

社区成员

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

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