- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我写了一小段代码,它应该接受一个字符数组并让它看起来像计算机正在输入文本。很简单,对吧?但是当我运行它时,Terminal 告诉我:
*** stack smashing detected ***: ./TYPE terminated
======= Backtrace: =========
/lib/i386-linux-gnu/libc.so.6(__fortify_fail+0x45)[0xb759aeb5]
/lib/i386-linux-gnu/libc.so.6(+0x104e6a)[0xb759ae6a]
./TYPE[0x80486a9]
/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf3)[0xb74af4d3]
./TYPE[0x8048591]
======= Memory map: ========
08048000-08049000 r-xp 00000000 08:01 1580147 /home/jeremy/Desktop/programming/cpp/Jumping into C++/TYPE
08049000-0804a000 r--p 00000000 08:01 1580147 /home/jeremy/Desktop/programming/cpp/Jumping into C++/TYPE
0804a000-0804b000 rw-p 00001000 08:01 1580147 /home/jeremy/Desktop/programming/cpp/Jumping into C++/TYPE
08a30000-08a51000 rw-p 00000000 00:00 0 [heap]
b7449000-b744b000 rw-p 00000000 00:00 0
b744b000-b7467000 r-xp 00000000 08:01 4195157 /lib/i386-linux-gnu/libgcc_s.so.1
b7467000-b7468000 r--p 0001b000 08:01 4195157 /lib/i386-linux-gnu/libgcc_s.so.1
b7468000-b7469000 rw-p 0001c000 08:01 4195157 /lib/i386-linux-gnu/libgcc_s.so.1
b7469000-b7493000 r-xp 00000000 08:01 4198259 /lib/i386-linux-gnu/libm-2.15.so
b7493000-b7494000 r--p 00029000 08:01 4198259 /lib/i386-linux-gnu/libm-2.15.so
b7494000-b7495000 rw-p 0002a000 08:01 4198259 /lib/i386-linux-gnu/libm-2.15.so
b7495000-b7496000 rw-p 00000000 00:00 0
b7496000-b763a000 r-xp 00000000 08:01 4198264 /lib/i386-linux-gnu/libc-2.15.so
b763a000-b763c000 r--p 001a4000 08:01 4198264 /lib/i386-linux-gnu/libc-2.15.so
b763c000-b763d000 rw-p 001a6000 08:01 4198264 /lib/i386-linux-gnu/libc-2.15.so
b763d000-b7640000 rw-p 00000000 00:00 0
b7640000-b7718000 r-xp 00000000 08:01 8786914 /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16
b7718000-b7719000 ---p 000d8000 08:01 8786914 /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16
b7719000-b771d000 r--p 000d8000 08:01 8786914 /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16
b771d000-b771e000 rw-p 000dc000 08:01 8786914 /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16
b771e000-b7725000 rw-p 00000000 00:00 0
b773e000-b7742000 rw-p 00000000 00:00 0
b7742000-b7743000 r-xp 00000000 00:00 0 [vdso]
b7743000-b7763000 r-xp 00000000 08:01 4198254 /lib/i386-linux-gnu/ld-2.15.so
b7763000-b7764000 r--p 0001f000 08:01 4198254 /lib/i386-linux-gnu/ld-2.15.so
b7764000-b7765000 rw-p 00020000 08:01 4198254 /lib/i386-linux-gnu/ld-2.15.so
bffc0000-bffe1000 rw-p 00000000 00:00 0 [stack]
abcdefghijklmnopqrstuvwxyzAborted (core dumped)
我是 C++ 的新手(我有 C 语言背景),我不知道堆栈粉碎或回溯是什么。如果你能帮助我,那将有很大帮助!这是代码:
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <unistd.h>
using namespace std;
void type(char letters[]);
int main(){
char letters[27] = "abcdefghijklmnopqrstuvwxyz";
system("clear");
type(letters);
return 0;
}
void type(char letters[]){
unsigned int wait = 30000000;
system("clear");
for(int i = 0; letters[i] != '\n'; i++){
usleep(wait)
cout << letters[i];
}
}
最佳答案
C++ 中的字符串应该以 null 结尾,即它们的最后一个字符是 \0
。在您的代码中,循环不会在字符串 letters
的末尾终止,因为您正在寻找该字符串中实际上不存在的 \n
字符.
第一次修复
用您在循环中查找的字符终止字符串:
char letters[28] = "abcdefghijklmnopqrstuvwxyz\n";
第二次修复
通过查找实际存在的字符串结尾字符 \0
来终止循环:
for(int i = 0; letters[i] != '\0'; i++)
第三次修复
使用适当的 string length检查作为循环终止标准:
int len = strlen(letters);
for(int i = 0; i < len; i++)
或这三者的任意组合。
一般来说,将字符串声明为固定大小的数组绝不是一个好主意,因此请改用 const char *letters = "...";
。
关于c++ - 堆栈粉碎/回溯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27661824/
Video explaining for those who does not understand 此答案未正确回答,请尝试使用其他解决方案来回答(100 Bounty 已过期) 同样的问题,但解释
我有一个使用线程来从文件中读取一些内容的 Activity 。 问题是,如果用户决定在线程运行时旋转屏幕,应用程序就会崩溃。 我知道我可以使用以下方法阻止屏幕旋转: android:screenOri
我正在上计算机安全课并且正在阅读 http://phrack.org/issues/56/8.html .在 bo3.cpp 中,作者创建了他自己的 VTABLE,并覆盖 VPTR 以指向他的 VTA
我们在 Mesos 0.17 上针对 CDH5 运行 Spark 0.9.1。到目前为止,我们继续使用 CDH 系列的“mr1”版本,以便我们可以运行 filecrush。项目在我们的小文件上。由于各
我知道如何删除文件以使它们无法恢复。但是,如何以导致相同结果的方式从 POSIX 环境中的 MySQL 表中删除行?在继续删除该行之前,我目前正在使用与原始数据长度相同的无效字符串重写所有数据。它有效
我有一个如下所示的 XML 文件:
我正在尝试使用 Tween 和平面几何在 Three.js 中创建玻璃 splinter 效果,但有点迷失。网格/几何体不会随补间更新,如果我在第一次渲染之前调用 shatter(),您可以看到补间正
我正在尝试使用我在 XML 中接收的一些日志数据。 在清理数据以使其成为有效的 XML 之后,我在 SQL Server 中获得了 XML 数据包。 (并从 JSON 包装器等中获取其他属性) 但是现
当我将 slim-rails 添加到 Gemfile 并启动我的应用程序时,它崩溃并出现以下错误: /Users/rado/.rbenv/versions/2.3.1/gemsets/project/
我是一名优秀的程序员,十分优秀!