【发布时间】:2012-06-15 06:50:18
【问题描述】:
我从键盘输入了一个字符,按整数:
int c = getch();
只有当它不是 return 时,我才想将它附加到字符串中:
void somefunction()
{
std::string str = "you pressed: ";
int c;
while ( 1 )
{
c = getch();
if ( c == 10 ) break;
char* ch;
sprintf(ch,"%c",c);
str += std::string(ch);
}
}
但是,当离开somefunction 的范围时,这会产生分段错误。我猜想当 str 的 dtor 被调用时,指向 ch 的指针不再可用。
我该如何解决这个问题?
【问题讨论】:
-
你的问题是指针ch没有初始化,可以指向任何地方。
-
发生分段错误是因为您实际上没有为字符数组
sprintf打印分配任何内存。 -
您的另一个问题是您将 C 风格的字符串操作与其 C++ 风格混合在一起。当然,这是可以做到的,但不是必要且不重要的(如 sstn 所示)。
-
段错误是因为 sprintf 正在写入随机数据。将
char *ch;更改为char ch[2];- 但实际上,在答案中使用任何正确的 std::string 方法... -
奇怪的是,当我注释掉
str += ...行时,没有发生段错误,让我相信ch初始化已正确完成。
标签: c++ string pointers scope append