int64 c ++ debian6 - PullRequest
       1

int64 c ++ debian6

0 голосов
/ 23 апреля 2011

почему я не могу заставить работать этот int64? я компилирую с g ++ -x c ++ -o программным источником.c он продолжает начинаться с -2147483648 выше 2147483647 ....

#include <stdint.h>
#include <inttypes.h>
#ifdef __cplusplus
#include <cstdio>
#include <cstdlib>
#include <cstring>
#else
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#endif

int main(int argc, char* argv[])
{
    int64_t i;
    for(i = 0; i < argc; ++i)
        printf("argv[%d]: %s\n", i, argv[i]);

    char string [512];
    int64_t a1 = atoi((const char*) gets(string));
    int64_t limit = a1 + 99999999999

    while(a1 <= limit)
    {
        char command[10000];
        sprintf(command, "%d", a1);
        FILE* pFile = fopen ("myfile.txt","wa");
        fprintf (pFile, "%s\n", command);
        fclose (pFile);

       a1= a1 + 4321;
    }
    return EXIT_SUCCESS;
}

с

Ответы [ 2 ]

4 голосов
/ 23 апреля 2011

Я думаю, вам следует заменить

sprintf(command, "%d", a1);

на

sprintf(command, "%lld", a1);

Использование неправильного спецификатора формата - неопределенное поведение.AFAIK, использование %d в качестве спецификатора формата в gcc заставляет выводить только 32 бита, что приводит к тому, что в вашем выходном файле происходит переполнение.

2 голосов
/ 23 апреля 2011

int64_t limit = a1 + 99999999999;

Слишком большая целочисленная константа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...