что не так с этим куском кода меня спросили - PullRequest
0 голосов
/ 15 апреля 2019
#include <string.h>

void foo (char *bar)
{

    char c[12];
    strcpy(c, bar);

}
int main (int argc, char **argv)
{

    foo(argv[1]);
    return(1);

}

1 Ответ

2 голосов
/ 15 апреля 2019

Есть две проблемы:

  • , если у программы нет аргументов argv[1] имеет значение NULL и в foo вы делаете strcpy(c, NULL); с неопределенным поведением (обычно сбой).
  • если первый аргумент программы содержит хотя бы 12 символов, strcpy(c, bar); запишет из c , опять же с неопределенным поведением.

Я не говорю о том факте, что strcpy в лучшем случае бесполезен, поскольку c не используется после

БезопасныйВерсия вашей программы с минимальными изменениями:

#include <string.h>

void foo (char *bar)
{
  char c[12];

  strncpy(c, bar, sizeof(c) - 1);
  c[sizeof(c) - 1] = 0;
}

int main (int argc, char **argv)
{
  if (argc >= 2)
    foo(argv[1]);
  return(1);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...