- 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/
这个问题在这里已经有了答案: standalone parentheses in javascript [duplicate] (5 个答案) 关闭 8 年前。 我在学习JavaScript,有时会
我是mysql新手,我必须减少以下更新查询的执行时间 UPDATE temp_countcalculations, ( SELECT count(*) as insuffcounts,CRP_
def escape_html(s): for (i, o) in (("&","&"),(">", ">"),(" "变成 ">"等。 关于python - 以下 for 循环
if (read(read(cin, data1), data2)) 问题是C++ Primer 5th Edition 的练习。 read 函数定义如下: std::istream &read(st
我想创建两个宏。其中一个将扩展到函数原型(prototype)和函数内容,另一个将扩展到仅函数原型(prototype)。我正在考虑创建以下内容: #ifdef SOME_CONDITION #def
我正在使用 jongo API - org.jongo.MongoCollection 是类。 我有对象 ID 列表并转换为与 ObjectId[] 相同并尝试按如下方式查询 collection.f
有人可以解释以下正则表达式匹配什么吗? ^.*$ 谢谢! 最佳答案 或者整个字符串或者整行,取决于是否multiline mode被使用。 关于java - 以下 ^.*$ 正则表达式匹配什么?,我们
#include void main() { int a,b,c; for(b = c = 10; a = "- FIGURE?, UMKC,XYZHello Folks,TFy!QJ
我的代码段中的以下代码行被 Sonar 检测为问题。 代码段: final int Pending=1; Sonar 问题: Name 'Pending' must matc
Print name of all activities with neither maximum nor minimum number of participants 我尝试了以下查询,但出现错误:
这个问题在这里已经有了答案: What is this practice called in JavaScript? (7 个回答) 关闭8年前。 (function() { //do stuff
根据任务,我们必须通过 foldr 实现 foldl。通过比较函数签名和 foldl 实现,我得到了以下解决方案: myFoldl :: (a -> b -> a) -> a -> [b] -> a
这个问题在这里已经有了答案: Export an es6 default class inline with definition or at end of file? (1 个回答) 关闭 2 年
据我了解,以下是相同的: Person p{}; // Case 1 Person p = {}; // Case 1.5 我注意到 Person p = Person{}; // Case 2 产生
below i have given a javascript code picture `` can any one help me in this code. what do this code.
我想在标题和正文上搜索全文,并在答案计数上进行过滤。 我阅读了elasticsearch documentation for combining filters并构建了此查询。 "query": {
它是流动的 C 代码中的内存泄漏吗? #include int *a; int main() { a = malloc(sizeof(int)*10); return
这两个声明有什么区别: char (*ptr)[N]; 对比 char ptr[][N]; 谢谢。 最佳答案 (1)声明 char (*ptr)[N]; ptr 是指向大小为 N 的字符数组的指针 下
data II = I Int Int deriving (Show) instance II Show where show I a b = show (a+b) showt.hs:3:2: s
我从 clojuredoc 中阅读了关于 condp 的文档。在文档中我找到了以下代码: (condp 一些 [1 2 3 4] #{0 6 7} :>> 公司 #{4 5 9} :>> 十二月 #{
我是一名优秀的程序员,十分优秀!