Существует две возможные причины ошибки seg.
1) Нет argv[1]
, т.е. вы пытаетесь скопировать из нулевого указателя (то есть ... Если программа запущена безаргументы, argv[1]
может быть получен доступ, но будет возвращать указатель NULL. Следовательно, копирование с него является недопустимым и может вызвать ошибку сегмента).Таким образом, если вы запустите программу наподобие ./program
, то программа завершится сбоем, поскольку argv[1]
равно NULL
2) Длина argv[1]
превышает пункт назначения, то есть 7 символов и завершающий NUL.Если это так, вы пишете вне границ и можете вызвать ошибку сегмента.
Чтобы получить правильный код, выполните:
int main(int argv,char * argv[])
{
char buffer_two[8];
if ((argc > 1) && (strlen(argv[1]) < 8)) // Make sure arg[1] is there
// Make sure it's not too long
{
strcpy(buffer_two, argv[1]);
}
else
{
printf("Illegal start of program\n");
}
return 0;
}
BTW
При печати указателя с использованием %p
убедитесь, что приведено значение void*
Так что
printf("[After] buffer_two is at %p and contains \'%s\'\n", buffer_two, buffer_two);
должно быть
printf("[After] buffer_two is at %p and contains \'%s\'\n", (void*)buffer_two, buffer_two);