ошибка sprintf в визуальной студии

Я работаю над программой сокета UDP в Windows Visual Studio.
Я получаю сообщение об ошибке для оператора sprintf. Как это исправить?
Мой код:

    for (i = 0; i < 30;i++) //take-off
{
printf("send AT*REF:take off\n");
sprintf(command, "AT*REF=%d,290718208\r", seq++);rc = sendto(sd, command, strlen(command) + 1, flags, (struct sockaddr *) &droneAddr, sizeof(droneAddr));
if (rc<0) {
printf("%s: can not send data\n", argv[0]);
return(1);
}
}

Я получаю следующие ошибки:

Error   1 error C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS.
Error   1 error LNK2019: unresolved external symbol __imp__bind@12
Error   2 error LNK2019: unresolved external symbol __imp__htonl@4 referenced in function _main
Error   3 error LNK2019: unresolved external symbol __imp__htons@4
Error   4 error LNK2019: unresolved external symbol __imp__sendto@24
Error   5 error LNK2019: unresolved external symbol __imp__socket@12
Error   6 error LNK2019: unresolved external symbol __imp__gethostbyname@4
Error   7 error LNK1120: 6 unresolved externals

5

Решение

printf и его сестринская функция sprintf считаются небезопасными из-за количества неопределенное поведение они излучают, если используются неправильно.

Visual Studio по умолчанию отключает эти функции.

Но, поскольку они являются частью стандартной библиотеки C ++, вы Можно используй их. Но Visual Studio позволит вам сделать это, только если вы включите строку

#define _CRT_SECURE_NO_WARNINGS

перед включением соответствующих заголовков стандартной библиотеки.

В качестве альтернативы, включить _CRT_SECURE_NO_WARNINGS в вашем проекте настройки препроцессора (что я и делаю).

(Кстати, Visual Studio в этом случае выдает очень полезное сообщение об ошибке. Постарайтесь научиться их интерпретировать.)

23

Другие решения

Для большинства ошибок в вашем вопросе вам нужно добавить ws2_32.lib в библиотеку, на которую ссылается проект (в проекте VS Linker | Input | Additional Dependencies имущество).

Другие ответы / комментарии адресованы sprintf() проблема: либо определил макрос _CRT_SECURE_NO_WARNINGS или используйте версию sprintf() Microsoft считает это безопасным, например, sprintf_s(), Я бы хотел, чтобы у MSVC была стандартная версия snprintf() это может быть использовано (может быть, скоро — они добавляют довольно много C99 в цепочку инструментов).

3

По вопросам рекламы [email protected]