Странная ошибка SIGABRT - PullRequest
1 голос
/ 14 июля 2010

Я пытался создать программу, но при добавлении sprintf к уравнению я получаю следующую ошибку:

Программа получила сигнал: "SIGABRT"

My 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 Ответ

2 голосов
/ 14 июля 2010

В реальном коде вы предполагаете, что буфер b достаточно большой, чтобы вывести результат для i*g в, но вы никогда не инициализируете g перед его первым использованием в этой строке:

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

Но даже если g был инициализирован, вам не хватает того, что буфер также должен содержать символ \0, поэтому он слишком мал.

...