2016-03-03 4 views
3

В моем исходном коде (в C), есть строка, как показано ниже:Как исправить ошибку на проверку Parasoft

char line[1000] = ""; 
fgets(line, sizeof(line), file) 

Когда я использую Parasoft, чтобы проверить, я получаю две ошибки:

In 'fgets' function call, do not pass long casted to int expression as '2' function argument 
The type 'unsigned long' of function argument number '2' does not match declared type 'int' 

Я не нашел ничего плохого в этих строках в исходном коде, поэтому я не знаю, как исправить эту ошибку. Не могли бы вы дать мне предложение?

+0

Прототипом fgets является 'char * fgets (char * str, int num, FILE * stream);' и, по-видимому, на вашей платформе тип 'sizeof' оператора' unsigned long'. Проверь это. –

ответ

1

fgets принимает второй номер параметра int. (ИМХО, это дефект)

sizeof возвращает значение типа size_t, которое в вашем случае является псевдонимом unsigned Iong. Проблема заключается в том, что unsigned long может быть (слишком) слишком большим, чтобы конвертировать его в int.

Здесь вы не можете ничего сделать. Чтобы избавиться от этой ошибки вы можете использовать бросок:

fgets(line, (int)sizeof(line), file); 

Обратите внимание, что использование sizeof может получить вас в неприятности, если в какой-то момент вы решили изменить этот массив в динамически выделяется один или если вы рефрактор кода в разные функции.

+0

Я думаю, что он был помечен C, а не C++ so (int) –

+0

@AndersK. Действительно, исправлено. Спасибо! –

0

Какой продукт вы используете? Если вы используете тест C++, вы можете перейти к представлению качества задач для сообщения о нарушении и щелкнуть правой кнопкой мыши на нарушении и выбрать «Просмотр документации правила». Это объясняет, почему возникает нарушение, и дает вам пример как исправить нарушение.

 Смежные вопросы

  • Нет связанных вопросов^_^