我的程序中有关于char类型变量的问题。 我没有发布代码,因为它太长了,但这大致是我想做的事情:
#include ...
char path[100];
int main()
{
char path[100] = "C:/......";
[...]
out = function();
}
int function()
{
[...]
imwrite(path,image);
[...]
}
问题是我的路径变量似乎以某种方式丢失,因为如果我尝试cout< <在函数imwrite之前的路径,doesen打印任何东西就像路径是空的一样。
我应该怎样做才能在功能中访问我的路径变量?
答案 0 :(得分:1)
您正在主函数范围内以及全局范围内定义path
变量。
在main()
中,您有path
的新声明:
char path[100] = "...";
这有效地为您提供了两个具有相同名称但在不同范围内的变量。如果您从path
方法中访问main
,它将访问本地范围的变量。
如果您希望以这种方式保留它,并删除全局范围的path
变量,则可以将您的函数重新声明为:
int function(char* p_path)
{
imwrite(p_path, image);
}
并将值作为参数传递给main:
char path[100] = "...";
...
function(path);
另外,您可以通过引用::path
来强制从main方法中访问全局范围的变量,{{1}}指定全局命名空间。但这是另一个故事。
答案 1 :(得分:0)
您正在path
中定义全局变量path
(在全局范围内)和局部变量main()
。这意味着在main()
内,path
指的是本地的,function()
指的是全局的。{/ p>
如果路径是硬编码的(如您给出的示例中所示),则可以执行以下操作:
#include ...
char path[100] = "C:/......";
int main()
{
[...]
out = function();
}
如果需要计算路径,请改为:
#include ...
char path[100];
int main()
{
[...]
std::copy(computedPathValue, computedPathValue + computedPathLength + 1, path);
out = function();
}
当然,最好是std::string path
而不是char[100]
。