- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我的代码中出现总线错误。使用此代码,我试图将数字转换为单词,但我知道我的逻辑存在缺陷。但在此之前,当我在 Mac 上使用 g++ 编译并运行此代码时,我试图让这段代码按原样运行,但出现总线错误。任何帮助将不胜感激。
当我运行代码时,我得到以下输出。我有调试消息来跟踪错误发生的位置。
Enter a number:1234 main 1:numbers are:234 Function1: Number is 234 two two hundred 34Function2: Number is 34 Function3: Number is 34 Bus error: 10
#include <iostream>
#include <string>
using namespace std;
char *convert_number(int);
char *tens[] = {"", "ten", "twenty", "thirty", "forty",
"fifty", "sixty", "seventy", "eighty", "ninety"};
char *words[] = {"zero", "one", "two", "three", "four",
"five", "six", "seven", "eight", "nine",
"ten", "eleven", "twelve", "thirteen", "fourteen",
"fifteen", "sixteen", "seventeen", "eighteen", "ninteen"};
char *place[] = {"", "hundred", "thouands", "million", "billion", "trillion"};
int main(int argc, char **argv)
{
int number, conv_num, places;
places = 1;
char *string = new char[1000];
char *temp_string = new char[100];
cout << "Enter a number:";
cin >> number;
string = " ";
if (number >= 1000)
{
while(number >= 1)
{
conv_num = number % 1000;
cout << "main 1:numbers are:" << conv_num << endl;
temp_string = convert_number(conv_num);
string =strcat(string, temp_string);
string =strcat(string, " ");
number = 0; // (number-conv_num)/1000;
cout << "main 2:numbers are:" << endl;
//cout << conv_num << ":" << number << endl;
}
}
else
{
string = convert_number(number);
string = strcat(string, " ");
}
cout<<"Main: The word is :"<<string<<endl;
}
char *convert_number(int number)
{
int divisor;
char *word;
word = new char[100];
divisor = 10;
cout << "Function1: Number is " << number << endl;
if (number >= 100)
{
word = strcat(word, words[number/100]);
cout << word << endl;
word = strcat(word, " hundred ");
cout << word << endl;
number = number%100;
cout << number;
}
cout << "Function2: Number is " << number << endl;
if (number >= 20)
{
word = strcat(word, tens[number/10]);
word = strcat(word, " ");
if (number%divisor >= 1)
{
word=strcat(word, words[number%divisor]);
word =strcat(word, " ");
}
}
cout << "Function3: Number is " << number << endl;
if (number < 20)
{
word = strcat(word, words[number]);
word = strcat(word, " ");
}
cout << "Returning word:" << word;
return word;
}
最佳答案
你得到总线错误的原因是因为你正试图写入不可写区域(即写入字符常量,也超过它的末尾);这是未定义的行为。
// Good: allocate 100 bytes to string
char *string = new char[100];
// Bad! Compiler warns you that assigning character const to char* is wrong.
// It does not tell you that you've just leaked the 100 bytes that you allocated
/// before, but that's also true.
string=" ";
// ... some more code, and then
string = strcat(string,temp_string); // <<== HERE is the problem!
对 strcat
的调用尝试写入 string
的终止零,然后继续写入超过字符串常量的末尾。这是未定义的行为,因此您的程序会崩溃。
要解决此问题,您需要将""
复制到string
中,而不是将其分配给string
指针。
关于c++ - 我在以下代码中收到总线错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10729906/
目录 总线是什么? 常见总线类型有哪些? 总线的串行和并行的区别? 数据总线 地址总线
从下面的代码我在 map 上添加标记,每 15 秒刷新一次并从数据库中获取新的纬度和经度。标记(巴士图像)已成功添加到 map 上并从一个位置平稳移动到另一个位置,就像汽车在路上行驶一样。现在我想要的
如果在小端处理器上运行的程序将未缓存的值 0xaabbccdd 写入地址 0,并且处理器使用 32 位宽的 AXI4 总线,那么 WDATA 的第 31-24 位是 0xaa 还是 0xdd? AXI
是否存在用于将进程内服务消息传递给另一个服务的扭曲机制?我写了一个原型(prototype)总线,看起来像 from collections import defaultdict ch
我修改了设备树文件并使用 4 个 GPIO 引脚启用了 spi,这些引脚支持 pinmux 并从 gpio 切换到 spi 功能。但是在 Linux 内核代码中,代码如何知道使用了哪个 spi 总线/
我正在使用控创嵌入式计算机通过 I2C 与 ST 微 Controller 通信。我正在使用开发适配器与 I2C 接口(interface),使用描述的简单 read() 和 write() 函数 h
我有一个需要 PEC 的 I2C/SMBus 设备我正在为它编写一个内核空间驱动程序。 在 Linux 2.6.37 上我使用 i2c_board_info实例化客户端并在那里设置标志,但现在驱动程序
我想确认我的消息已经通过 socketCAN 库保存在 CAN 总线上。socketCAN 文档描述了使用 recvmsg() 函数时的这种可能性,我对其实现有疑问。 我要实现的功能是确认我的消息在仲
下面是我的代码 #import #import int main(int argc, const char *argv[]) { char *str = "First string";
在大量使用 D-Bus 的应用程序中获得更好的时间性能有哪些好的做法? ? 以下是我们的团队通过硬敲学校学到的一些知识: 尝试将数据实体组合成一个单一的大型结构/对象,以通过 D-Bus IPC 发送
我正在Akka内核下运行Akka应用程序,该程序在其他系统上也可以正常工作。 akka { loggers = ["akka.event.slf4j.Slf4jLogger"] log
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
我是 C 语言新手,对于家庭作业考试,我必须实现一个简单的服务器套接字程序,该程序在循环中发送一些数据,并且如果客户端连接到服务器套接字(已使用 Arduino 完成,但需要相同的功能)在 raspb
我正在构建一个由许多(> 100)个相同节点组成的系统,所有节点均通过 CAN 总线连接。这个想法是所有节点必须具有相同的信息,任何节点都可以生成事件并通过 CAN 广播它。对于这些事件,CAN 帧提
您好,我在解析 IIB Toolkit 中的任何 JSON 时遇到问题。 java计算节点抛出的异常为:java.lang.NoClassDefFoundError: org.json.JSONObj
我买了这个传感器: http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Sensors/Weather/RHT03.pdf 输出为“MaxDetect 1-w
我正在用户空间编写包装器 API,用于在嵌入式 Linux 平台上用 C 语言控制 I2C 总线。我能够使用 read() 和 write() 方法以及 ioctl() 调用来选择从属设备,从而从传感
在我的软件(用 C++ 编写)中,我使用 Linux 标准函数打开 CAN 总线套接字并执行 I/O 操作。 套接字的打开和使用如下: /* Create the socket */ if ((
每天——大约 5 到 10 次——我的 USB 摄像头从系统中消失。它从第一天开始就发生了,因为制造商驱动程序与 Linux 不兼容。 lsusb 和 dmesg 一开始正确显示,但在较长时间后有时会
我分发了包含多个 Go 服务的应用程序。其中一些使用 Kafka 作为数据总线。我能够使用 Jaeger 的 opentracing 追踪服务之间的调用。我在图表上绘制 Kafka 跨度时遇到问题,它
我是一名优秀的程序员,十分优秀!