Есть две проблемы:
- , если у программы нет аргументов
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);
}