10行的程序,这个程序错在哪里

sicofield 2013-05-01 08:56:18

#include <stdio.h>
int main()
{
char *s="Golden Global View";
char *p=s;
p+=10;
*p ='\0';
printf("%s\n",s);
return 0;
}
...全文
160 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2013-05-02
  • 打赏
  • 举报
回复
#pragma comment(linker,"/SECTION:.rdata,RW")
//加这句可以让常量区可写。后果自负!
C_linux记事 2013-05-02
  • 打赏
  • 举报
回复
字符常量不能修改, 要改成数组才能修改。。。
疯狂的红豆 2013-05-02
  • 打赏
  • 举报
回复
#include <stdio.h> int main() { char *s="Golden Global View"; char *p=s; p+=10; *p ='\0'; printf("%s\n",s); return 0; } 这代码编译无无误,但是运行有误,但最好不要写这种代码,尽可能的将错误提前暴露《Effective C++》中的话 程序中的字符串是一个字符串字面值,属常量区的东西,但是你却用了一个普通的字符串指针s给指向了,这就是问题的祸根,好的写法是const char *s = "Golden Global View"; 这样子你的这句代码char *p = s;就会在编译器抛错了,不允许一个常量赋给一个非常量变量的。
u010531196 2013-05-01
  • 打赏
  • 举报
回复
字符串常量不能修改。
就是那个党伟 2013-05-01
  • 打赏
  • 举报
回复
http://blog.csdn.net/dw903632958/article/details/8873287 可以看看
就是那个党伟 2013-05-01
  • 打赏
  • 举报
回复

#include <stdio.h>
int main()
{
	char s[20]="Golden Global View"; //Golden Glo
	char *p=s;
	p = p+10;
	*p ='\0';
	printf("%s\n",s);
	return 0;
}
这么就行了,如果使用char s*,可以理解为const的。所以不可以直接通过*p来直接修改
老王爱上猫 2013-05-01
  • 打赏
  • 举报
回复
2楼,字符常量不能改....
慧钦 2013-05-01
  • 打赏
  • 举报
回复
char *s="Golden Global View"; 变量s是放在栈中的,而它指向的字符串"Golden Global View"是放在只读数据区的,不能通过指针修改
芥末的无奈 2013-05-01
  • 打赏
  • 举报
回复
引用 1 楼 hugett 的回复:

#include <stdio.h>
int main()
{
	char s[]="Golden Global View";//改成这样。。
	char *p=s;
	p+=10;
	*p ='\0';
	printf("%s\n",s);
	return 0;
}
hugett 2013-05-01
  • 打赏
  • 举报
回复

#include <stdio.h>
int main()
{
	char s[]="Golden Global View";//改成这样。。
	char *p=s;
	p+=10;
	*p ='\0';
	printf("%s\n",s);
	return 0;
}

64,281

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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