奇怪的SIGABRT错误

时间:2010-07-14 19:15:34

标签: c printf sigabrt

我正在尝试创建一个程序,但是当在等式中添加sprintf时,我收到以下错误:

  

收到信号:“SIGABRT”

我的sprintf内容如下:

int i;
int g;
char b[6];
sprintf(b, "%d", i*g);

如果你需要在这里查看整个代码(但你可能不会,但以防万一):

#include <stdio.h>
#include <stdlib.h>


int main (int argc, const char * argv[]) {
    int i;
    int g;
    char b[6];
    char temp[6];
    char c[6];
    int lol;
    int revlol;
    int assign;
    for (i = 100; i < 1000; i++)
    {
        sprintf(b, "%d", i*g);
        for (g = 100; g < 1000; g++)
        {
            for (lol = 5; lol > -1; lol--)
            {
                for (revlol = 0; revlol < 6; revlol++)
                {
                    temp[lol] = b[revlol];
                }
                if (temp == b)
                {
                    for (assign = 0; assign < 6; assign++)
                    {
                        c[assign] = b[assign];
                    }
                }
            }
        }
    }
    printf("%s", c);
}

但是,问题只发生在我使用sprintf时。另请注意:我没有使用itoa因为我的编译器不允许它。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

在实际代码中,您假设缓冲区b足够大,可以打印i*g的结果,但在第一次使用此行之前,您永远不会初始化g

sprintf(b, "%d", i*g);

但即使g已初始化,您也错过了缓冲区也必须保留\0字符,因此它太小了。