和字符串相关,编译时一处错误,

cnxfmz 2011-05-11 08:55:07

int n = 1;
if(n == 1)
{
string p = "111";
}
else
{
string p = "222";
}
cout << p << endl;


dev c++环境,编译时报p未定义。
哪里错了?



char a[10];
char* p = a;
int n = 1;
if(n == 1)
{
p = "111";
}
else
{
p = "222";
}
cout << p << endl;

这下修改后的代码,只是觉得太麻烦,有没有其它办法?
...全文
189 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
turing-complete 2011-05-11
  • 打赏
  • 举报
回复
int n = 1;
string p = n== 1?"111":"222";
std::cout << p << std::endl;
turing-complete 2011-05-11
  • 打赏
  • 举报
回复
这样,应该是你想要的效果
[code=C/C++]
#include <string>
#include <iostream>

using std::string;

int main()
{
int n = 1;
string p = n== 1?"111":"222";
std::cout << p << std::endl;
return 0;
} [code]
cnxfmz 2011-05-11
  • 打赏
  • 举报
回复
谢谢楼上各位朋友,p 生命周期明白了。
那要如何修改代码呢?

6楼朋友,你改的代码我这里编译出错。

int main()
{
int n = 1;
if(n == 1)char *p = "111"; // 也可以用string *p="111"
else char *p = "222"; //也可以用string *p="111"
cout<<p<<endl;
return 0;
}
xspace_time 2011-05-11
  • 打赏
  • 举报
回复
修改后的代码应该是正确的,但是先前的代码里面没有定义p,是有问题的
这段代码和问题都很简单
依个人理解上面的写法里面可以直接把string p="111"改为
string *p="111";
照楼上的复制粘贴修改后为
#include <iostream>
#include <string>
using namespace std
int main()
{
int n = 1;
if(n == 1)char *p = "111"; // 也可以用string *p="111"
else char *p = "222"; //也可以用string *p="111"
cout<<p<<endl;
return 0;
}

cppgp 2011-05-11
  • 打赏
  • 举报
回复
在p生命周期外对p进行了操作。

关键的一个问题是你的第二个代码:

char a[10];
char* p = a;
int n = 1;
if(n == 1)
{
p = "111";
}
else
{
p = "222";
}
cout << p << endl;

不要天真的认为a在这里有一毛钱的用途。当操作p="111"或者p = "222"时,p已经不再指向a了,当然,"111"或者"222"也不在a内存里。如果以后操作诸如strcpy(p,"copy")之类的操作,程序会陷入不确定状态。
xiaolomg 2011-05-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 pengzhixi 的回复:]

cout << p << endl;//你这句已经超出了p的作用域了。
[/Quote]
+1,局部变量用完之后会被销毁
delphiwcdj 2011-05-11
  • 打赏
  • 举报
回复

#include <iostream>
#include <string>
int main()
{
int n = 1;
if(n == 1) {
std::string p = "111"; // 生命周期在两个花括号之间
}
else {
std::string p = "222"; // 生命周期在两个花括号之间
}
std::cout << p << std::endl; // 找不到

return 0;
}
delphiwcdj 2011-05-11
  • 打赏
  • 举报
回复
因为是局部变量
pengzhixi 2011-05-11
  • 打赏
  • 举报
回复
cout << p << endl;//你这句已经超出了p的作用域了。

64,649

社区成员

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

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