У меня есть код, в котором оптимизирующий компилятор всегда дает сбой при каждом запуске.

char* GetWinSockVersion()
{
    char *tmpData = (char*)malloc(sizeof(wsaData.wVersion));
    _itoa_s<wsaData.wVersion>(wsaData.wVersion, tmpData, 10);
    return tmpData;
}

Это не сработает с _itoa_s. Мне интересно, почему он все время выходит из строя?

-1
Secret 1 Апр 2013 в 03:13
3
Что именно вы имеете в виду, когда говорите, что компилятор не работает? Выдает ошибку компилятора, дает сбой, выдает неверный код?
 – 
Grizzly
1 Апр 2013 в 03:21
Он вылетает с ошибкой выполнения (компиляторы терпят неудачу при выполнении, а не моя программа)
 – 
Secret
1 Апр 2013 в 03:32
Пожалуйста, добавьте полученное сообщение.
 – 
Drew Dormann
1 Апр 2013 в 03:46
Я не знаком с используемыми функциями, но похоже, что вы пытаетесь преобразовать в буфер, который слишком мал. Если первый аргумент _itoa_s является целым числом, тогда вы выделяете только sizeof int байта (обычно 4), но вы сообщаете _itoa_s, что их 10.
 – 
James Kanze
1 Апр 2013 в 03:52

1 ответ

Лучший ответ

Вы неправильно используете функцию.

_itoa_s требуется 4 аргументы.

Эта функция предназначена для использования с c, для c++ у вас есть поток.

Ваш код должен быть больше похож (при условии, что wsaData.wVersion - это число)

char *tmpData = (char*)malloc(sizeof( char ) * 80 );
_itoa_s(wsaData.wVersion , tmpData , 80 , 10);

//_itoa_s(number to convert , target string, size of target string, number base);
3
user1944441user1944441 1 Апр 2013 в 03:59