静态变量是全局变量吗?
Did a static variable is global variable?
我有两个 C++ 问题。
首先,全局变量和静态变量是一回事吗?静态变量有什么讲究?
其次,我实际上编写了一个项目,如果我不使用静态变量,我的代码会向我发送下一个错误:
Run-Time Check Failure #2 - Stack around the variable 'szData' was
corrupted.
这个错误是sprintf引起的,我把它去掉了,一切正常..
bool CreateFile(MyCards** ppCards)
{
fstream ficCar;
static char szData[31];
ficEmployes.open("./my_cards.dat", ios::in | ios::binary);
if (!ficCar.fail())
{
ficCar.close();
return false;
}
else
{
sort(ppCards, ppCards + 26271, OrderedCards);
ppCards.open("./nom_cartes.index", ios::out | ios::binary);
if (ficCar.fail())
{
throw "Error";
}
else
{
for (int indice = 0; indice < 10123; indice++)
{
sprintf(szData, "%-20s %010d \n",
ppCards[indice]->GetNom(),
ppCards[indice]->GetPosition());
ficCar.write(szEnregistrement, 30);
}
ficCar.close();
return true;
}
}
}
谁能帮帮我?谢谢!
在命名空间范围内声明的对象是 static
,从某种意义上说,它是 "global"。
在函数中声明并标记为 static
的对象由于其作用域的行为方式可以被称为 "global",但不能从函数外部访问它。
因此,您最好避免使用术语 "global" 并坚持使用精确的标准 C++ 术语。
至于您的代码错误,您试图将超过 31 个字符放入 31 个字符的数组中。这不会很顺利。
静态变量不等于全局,静态变量可以有作用域:编译单元内,函数内,class.
对于问题 #2,szData 有 31 个字节,但 sprintf
尝试在其上放置更多字节,因此它破坏了附近的东西。即使您将其设为静态,它也会破坏其他内容。
我有两个 C++ 问题。
首先,全局变量和静态变量是一回事吗?静态变量有什么讲究?
其次,我实际上编写了一个项目,如果我不使用静态变量,我的代码会向我发送下一个错误:
Run-Time Check Failure #2 - Stack around the variable 'szData' was corrupted.
这个错误是sprintf引起的,我把它去掉了,一切正常..
bool CreateFile(MyCards** ppCards)
{
fstream ficCar;
static char szData[31];
ficEmployes.open("./my_cards.dat", ios::in | ios::binary);
if (!ficCar.fail())
{
ficCar.close();
return false;
}
else
{
sort(ppCards, ppCards + 26271, OrderedCards);
ppCards.open("./nom_cartes.index", ios::out | ios::binary);
if (ficCar.fail())
{
throw "Error";
}
else
{
for (int indice = 0; indice < 10123; indice++)
{
sprintf(szData, "%-20s %010d \n",
ppCards[indice]->GetNom(),
ppCards[indice]->GetPosition());
ficCar.write(szEnregistrement, 30);
}
ficCar.close();
return true;
}
}
}
谁能帮帮我?谢谢!
在命名空间范围内声明的对象是 static
,从某种意义上说,它是 "global"。
在函数中声明并标记为 static
的对象由于其作用域的行为方式可以被称为 "global",但不能从函数外部访问它。
因此,您最好避免使用术语 "global" 并坚持使用精确的标准 C++ 术语。
至于您的代码错误,您试图将超过 31 个字符放入 31 个字符的数组中。这不会很顺利。
静态变量不等于全局,静态变量可以有作用域:编译单元内,函数内,class.
对于问题 #2,szData 有 31 个字节,但 sprintf
尝试在其上放置更多字节,因此它破坏了附近的东西。即使您将其设为静态,它也会破坏其他内容。