我有一个键盘上的字符,整数:
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
的指针不再可用。
我该如何解决这个问题?
答案 0 :(得分:13)
这比你想象的容易得多:
str.push_back(c);
答案 1 :(得分:7)
您正在获得分段错误,因为您尝试将sprintf
字符串转换为未知(尚未分配)的内存:
char* ch;
sprintf(ch,"%c",c);
代码的可能修复方法是将char* ch;
替换为char ch[2];
,这会导致ch
成为具有自动存储持续时间的静态分配数组。
但请注意,由于您使用C ++进行编程,因此使用std::string
而非C样式(char*
)字符串和C样式函数(如{{1})的流和方法会更明智}。