Тестовое задание C++ win
От: amberovsky  
Дата: 30.11.09 11:17
Оценка:
Здравствуйте.
При попытке устроится в одну фирму прислали "удалённое" тестовое задание.



Какие проблемы Вы видите в этих фрагментах кода и как предлагаете их решать?
1.
void g( char *, char *, size_t );
void f( size_t n )
{
 char *a = new char[n];
 char *b = new char[n];
 g( a, b, n );
 delete [] b;
 delete [] a;
}

2.
int main(int argc, char* argv[])
{
 if( argc > 1 )
  printf( argv[1] );
 return 0;
}


Я ответил так:
1. new может не сработать, нужно добавить, например, try/catch. Кроме того, g может "испортить" указатели (как тут просто решить я не знаю)
2. В аргументе командной строки может встретиться символ % или \, что будет расценено printf как специальный символ.
Если следующие символы совпадут с какой-либо спецификацией формата (для % или \), то в данном случае для % — UB, для \ — произойдёт подстановка.
Решение — printf("%s", argv[1]);
Ещё можно проверить что printf действительно напечатало нужное количество символов.


В итоге мне отказали.
В чём я ошибся или чего важного не указал?

07.05.10 02:19: Перенесено из 'C/C++'
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.