fgets () всегда завершают символьный буфер с \0?

Вот другое голосование за JMeter.

JMeter является инструментом тестирования загрузки с открытым исходным кодом, записанным в Java. Это способно к тестированию многих различных типов сервера (например, сеть, веб-сервисы, база данных, примерно что-либо, что использует запросы в основном).

Это действительно однако имеет крутую кривую обучения, как только Вы начинаете добираться до сложных тестов, но это определенно стоит того. Можно встать и работающий очень быстро, и в зависимости от того, какое стресс-тестирование Вы хотите сделать, который мог бы быть прекрасным.

Профессионалы:

  • Открытый исходный код/Бесплатный инструмент из проекта Apache (помогает с закрытием сделки)
  • Легкий начать с, и простой в использовании, как только Вы схватываете базовые понятия. (Т.е., как создать запрос, как создать утверждение, как работать с переменными и т.д.).
  • Очень масштабируемый. Я запустил тесты с 11 машинами, генерирующими нагрузку на сервер в размере почти миллиона хитов/час. Было очень легче установить, чем я ожидал.
  • Имеет активное сообщество и хорошие ресурсы, чтобы помочь Вам встать и выполнение. Прочитайте учебные руководства сначала и игру с ним некоторое время.

Недостатки:

  • UI записан в Swing. (тьфу!)
  • JMeter работает путем парсинга текста ответа, возвращенного сервером. Таким образом, если Вы надеетесь проверять какой-либо вид поведений JavaScript, Вы являетесь неудачливыми.
  • Кривая обучения крута для непрограммистов. Если Вы знакомы с регулярными выражениями, Вы уже перед игрой.
  • существуют большие количества (, вставляют ругательство ), идиоты в форуме поддержки, задавая глупые вопросы, которые могли быть легко решены, если они дадут документации даже поверхностный взгляд. ('Как я использую JMeter для стресс-теста, который мой Windows GUI' разоблачает вполне часто).
  • Создание отчетов 'из поля' оставляет желать лучшего, особенно для больших тестов. В тесте я упомянул выше, я закончил тем, что имел необходимость записать быстрое консольное приложение, чтобы сделать часть 'xml-файла-журнала' к преобразованиям 'HTML'. Это было несколько лет назад, хотя, таким образом, вероятно, что это больше не требовалось бы.

17
задан Oz123 24 February 2014 в 19:43
поделиться

4 ответа

Никогда не использовать получает !!

    7.19.7.2 The fgets function
    Synopsis
1           #include <stdio.h>
            char *fgets(char * restrict s, int n,
                 FILE * restrict stream);
    Description
2   The fgets function reads at most one less than the number of characters
    specified by n from the stream pointed to by stream into the array pointed
    to by s. No additional characters are read after a new-line character
    (which is retained) or after end-of-file. A null character is written
    immediately after the last character read into the array.
    Returns
3   The fgets function returns s if successful. If end-of-file is encountered
    and no characters have been read into the array, the contents of the array
    remain unchanged and a null pointer is returned. If a read error occurs
    during the operation, the array contents are indeterminate and a null
    pointer is returned.

Итак, да , когда fgets () не возвращает NULL, целевой массив всегда имеет нулевой символ.

Если fgets () возвращает NULL, целевой массив мог быть изменен и может не иметь нулевой символ. Никогда не полагайтесь на массив после получения NULL от fgets () .


Редактировать Пример добавлен

$ cat fgets_error.c
#include <stdio.h>

void print_buf(char *buf, size_t len) {
  int k;
  printf("%02X", buf[0]);
  for (k=1; k<len; k++) printf(" %02X", buf[k]);
}

int main(void) {
  char buf[3] = {1, 1, 1};
  char *r;

  printf("Enter CTRL+D: ");
  fflush(stdout);
  r = fgets(buf, sizeof buf, stdin);
  printf("\nfgets returned %p, buf has [", (void*)r);
  print_buf(buf, sizeof buf);
  printf("]\n");

  return 0;
}
$ ./a.out
Enter CTRL+D:
fgets returned (nil), buf has [01 01 01]
$

Видите? нет NUL в buf :)

7
ответ дан 30 November 2019 в 13:13
поделиться

fgets всегда добавляет '\ 0' в буфер чтения,

11
ответ дан 30 November 2019 в 13:13
поделиться

man fgets:

fgets () считывает не более одного символа меньшего размера из потока и сохраняет их в буфер, на который указывает s. Чтение останавливается после EOF или новой строки. Если читается новая строка, она сохраняется в буфере. '\ 0' сохраняется после последнего символа в буфере.

4
ответ дан 30 November 2019 в 13:13
поделиться

Да, это так. From CPlusPlus.com

Считывает символы из потока и сохраняет их в виде строки C в str до тех пор, пока не будут прочитаны (num-1) символы или пока не будет достигнута новая строка или конец файла, в зависимости от того, что наступит. first.

Символ новой строки останавливает чтение fgets, но считается допустимым символом и поэтому включается в строку, скопированную в str.

Нулевой символ автоматически добавляется в str после прочитанных символов, чтобы сигнализировать о том, что конец строки C.

1
ответ дан 30 November 2019 в 13:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: