Академический Документы
Профессиональный Документы
Культура Документы
Не зная брода, не лезь в воду. Часть вторая.
Не зная брода, не лезь в воду. Часть вторая.
.
:
: 01.02.2012
printf. ,
printf . ,
. - .
, printf. , , , -
. , ,
.
. , . , printf. ,
,
. ! , .
.
: .
:
printf(name);
. , ,
.
, .
. . ,
. , . ,
, , .
, , .
,
, . ,
. ,
.
" " . ,
. , Visual Studio 2010. -,
/GL (Whole Program Optimization). ,
__declspec(noinline).
.
. , . , .
,
.
Visual Studio 2010 .
const size_t MAX_NAME_LEN = 60;
enum ErrorStatus {
E_ToShortName, E_ToShortPass, E_BigName, E_OK
};
printf(name);
}
ErrorStatus IsCorrectPassword(
const char *universalPassword,
BOOL &retIsOkPass)
{
string name, password;
printf("Name: "); cin >> name;
printf("Password: "); cin >> password;
if (name.length() < 1) return E_ToShortName;
if (name.length() > MAX_NAME_LEN) return E_BigName;
retIsOkPass =
universalPassword != NULL &&
strcmp(password.c_str(), universalPassword) == 0;
if (!retIsOkPass)
retIsOkPass = name[0] == password[0];
printf("Hello, ");
PrintNormalizedName(name.c_str());
return E_OK;
}
IsCorrectPassword() .
, .
, .
, ,
. PrintNormalizedName().
PrintNormalizedName() . ,
"printf(name);". , .
, .
PrintNormalizedName()? , ,
. , "andREy2008",
"Andrey2008".
. , -
. , printf(). - ,
. , ?
. printf()
. . .
printf() , .
. "%d%s", ,
int . printf() ,
, ,
. , access violation
. , .
, , printf():
1. .
"printf(name);" ,
. , "%d", ,
PrintNormalizedName(). :
Name: %d
Password: 1
Hello, 37
Password: ERROR
. ,
char name[MAX_NAME_LEN + 1];,
. , , - .
,
, - . ,
.
2. . .
:
Name: Aaa
Password: _Universal_Pass_!
Hello, Aaa
Password: OK
! ,
. , ,
. .
.
, ,
, . -,
, , .
- , printf()
, . ,
:
printf("%s", name);
, printf() ? , ,
. "%n".
, printf().
, , "%n"
. Visual Studio 2005 "%n"
. .
:
_set_printf_count_output(1);
, "%n":
int i;
printf("12345%n6789\n", &i);
printf( "i = %d\n", i );
:
123456789
i=5
, , .
, .
, . -, 4
( int). , printf()
. , "%00u".
.
.
. isOkPassword ,
0. IsCorrectPassword(), ,
- . , .
, .
, IsCorrectPassword:
%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f %n
"%n" ,
, "%f". , "%n" ,
isOkPassword 1.
:
3. . .
? . .
,
.
, . ,
"%n" .
, .
, , , .
, , :
printf("%s", name);
. ,
. .
, printf(name).
. ,
, . ,
. , printf() . ,
, , .
, ,
. , ,
. , , .
. , sprintf_s sprintf .
- . -
. std::string. ,
boost::format std::stringstream.