Opened 5 years ago
Closed 5 years ago
#154 closed ожидается проверка (задача сдана)
WW #2
Reported by: | chaykova.anastasiya | Owned by: | Egor Suvorov |
---|---|---|---|
Component: | WW_strings | Version: | 2.0 |
Keywords: | Cc: |
Description
Change History (12)
comment:1 Changed 5 years ago by
Component: | HW #1 (BMP) → WW_strings |
---|
comment:2 Changed 5 years ago by
Owner: | changed from Egor Suvorov to chaykova.anastasiya |
---|---|
Type: | ожидается проверка → ожидаются исправления |
comment:3 Changed 5 years ago by
Ещё по корректности:
- У тестовых функций нет параметров => в сигнатуре должно быть
(void)
, иначе в языке Си это означает "любые параметры" (в C++ не так).
comment:4 Changed 5 years ago by
Owner: | changed from chaykova.anastasiya to Egor Suvorov |
---|---|
Type: | ожидаются исправления → ожидается проверка |
comment:5 Changed 5 years ago by
Version: | 1.0 → 2.0 |
---|
comment:6 Changed 5 years ago by
Owner: | changed from Egor Suvorov to chaykova.anastasiya |
---|---|
Type: | ожидается проверка → ожидаются исправления |
Пока что падают ваши тесты из-за undefined behavior:
This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information. Assertion failed! File: src/test_str.c, Line 19 Expression: my_strcmp(s,s1)==0
comment:7 Changed 5 years ago by
Owner: | changed from chaykova.anastasiya to Egor Suvorov |
---|---|
Type: | ожидаются исправления → ожидается проверка |
comment:8 Changed 5 years ago by
Owner: | changed from Egor Suvorov to chaykova.anastasiya |
---|---|
Type: | ожидается проверка → ожидаются исправления |
Корректность:
str.c
должен включатьstr.h
. Из-за этого зависимости от заголовков вMakefile
не соответствует реально включаемым заголовкам.- Include guard в
test_str.h
сделан с опечаткой. - У тестовых функций нет параметров => в сигнатуре должно быть
(void)
, иначе в языке Си это означает "любые параметры" (в C++ не так). - Сигнатуры не в точности соответствуют стандарту.
По стилю (пока 1.5/3):
- Ставьте отступы во всех блоках и внутри фигурных скобок. У вас в
my_strcpy
поехали как минимум. - В тестах можно сравнивать прямо строковые литералы (они уже лежат в константной памяти, на них можно брать указатели), незачем их сначала класть в массив. Например, в
test_strlen
. - Вместо
while (*s != 0)
лучшеwhile (*s)
(и в Си, и в C++, и во всех лабах). - Вместо
'\0'
лучше использовать просто0
. - Вместо
my_strcmp
в тестах лучше использовать прямые проверки элементов массиваassert'
ами. - Тесты на
strcmp
стоит либо объединить в однуtest_strcmp
, либо назвать так, чтобы их названия показывали, чем они отличаются (а не просто порядковый номер):test_strcmp_equal
,test_strcmp_less
.
Лайк за my_strcmp
!
Баллы за корректность:
- Ваши тесты проходят +1
- Корректный strcpy и тест +1
- Корректный strcat и тест +1
- Корректный strcmp и тест +1
- Корректный strlen и тест +1
comment:9 Changed 5 years ago by
Owner: | changed from chaykova.anastasiya to Egor Suvorov |
---|---|
Type: | ожидаются исправления → ожидается проверка |
comment:10 Changed 5 years ago by
Owner: | changed from Egor Suvorov to chaykova.anastasiya |
---|---|
Type: | ожидается проверка → ожидаются исправления |
Корректность:
- Ваш
test_strcpy
не проверяет корректностьmy_strcpy
.
Баллы за корректность:
- Корректный makefile и структура папок +1
- Корректные заголовки +1
- Ваши тесты проходят +1
- Корректный strcat и тест +1
- Корректный strcmp и тест +1
- Корректный strlen и тест +1
Стиль (2.5/3):
- Ставьте пробелы между
for
/while
/if
и следующей скобочкой:while (1)
, неwhile(1)
. - Ставьте пробелы вокруг бинарных операторов:
x[a + b] = y[c];
- Массив
s1
можно объявить проще:char s1[6] = { 'H', 'e', '\0' };
(в фигурных скобках перечисляете только первые элементы, которые хотите проинициализировать).
comment:11 Changed 5 years ago by
Owner: | changed from chaykova.anastasiya to Egor Suvorov |
---|---|
Type: | ожидаются исправления → ожидается проверка |
comment:12 Changed 5 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |
Успех, 10/10!
Note: See
TracTickets for help on using
tickets.
Корректность:
test.c
включаетstr.h
.test_str.h
включаетstr.h
.const
и/илиrestrict
в некоторых местах.my_strcat
делает немного не то (идея верная).assert((s2 == s1)==0);
— подозрительно выглядит. Здесь вы убеждаетесь, что(s2 == s1)
— ложь, т.е.s2 != s
. А тесты проходит.my_strcmp
есть UB.Стиль:
'\0'
лучше использовать просто0
.my_strcmp
, они скорее не нужны:(const char *) s1
.my_strcmp
не нуженbreak
, лучше напишите цикл с нужным условием.-c
традиционно вCFLAGS
не включают, а пишут в каждой строчке компиляции отдельно. Это нужно, чтобы можно было просто переиспользовать флаги, если мы хотим и скомпилировать, и слинковать.'\0'
лучше использовать просто0
.