Пожалуйста, объясните мне следующий пример. Проблема проста, но результаты резкие.Объясните мне следующий выход программы C
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
int flag = 0;
char passwd[10];
strcpy(passwd, argv[1]);
if(0 == strcmp("LinuxGeek", passwd))
{
flag = 1;
}
if(flag)
{
printf("\n Password cracked \n");
}
else
{
printf("\n Incorrect passwd \n");
}
return 0;
}
Значение флага меняется на значение мусора после строки
strcpy(passwd, argv[1]);
Однако, если определить переменную флаг, как,
int flag = 0
после того, как линии
strcpy(passwd, argv[1]);
Я получаю желаемый результат. Пожалуйста, объясните мне это вкратце.
Вкратце: Неопределенное поведение. –
Другие проблемы, чем это происходит, если длина argv [1]> 10 символов ... –
Движение символов выполняется по-разному в разных реализациях. Таким образом, перекрывающиеся перемещения могут вызвать неожиданности. – Afaq