0

我在我的程序中遇到了关于 char 类型变量的问题。我没有发布代码,因为它太长了,但这大致是我想要做的:

#include ...

char path[100];

int main()
{
    char path[100] = "C:/......";

    [...]

    out = function();
}

int function()
{
    [...]
    imwrite(path,image);
    [...]

} 

问题是我的路径变量似乎以某种方式丢失了,因为如果我在函数 imwrite 之前尝试 cout < < path 它不会打印任何东西,就好像路径为空一样。

我应该怎么做才能在函数中访问我的路径变量?

4

2 回答 2

1

您正在path主函数范围内以及全局范围内定义变量。

main()你有一个新的声明path

char path[100] = "...";

这有效地为您提供了两个具有相同名称但范围不同的变量。如果您pathmain方法内部访问,它将访问本地范围的变量。

如果您希望保持这种方式,并删除全局范围的path变量,您可以将您的函数重新声明为:

int function(char* p_path)
{
    imwrite(p_path, image);
}

并将值作为参数从 main 传递:

char path[100] = "...";
...
function(path);

::path顺便说一句,您可以通过引用指定全局命名空间来强制从主方法中访问全局范围的变量。但那是另一回事了。

于 2012-12-04T13:34:25.470 回答
0

您正在定义一个全局变量(在全局范围内)path和一个局部变量pathmain()这意味着 inside指的是本地的,而 inmain()指的是全局的。pathfunction()

如果路径是硬编码的(如您给出的示例中),您可以这样做:

#include ...

char path[100] = "C:/......";

int main()
{
    [...]

    out = function();
}

如果需要计算路径,请改为执行以下操作:

#include ...

char path[100];

int main()
{
    [...]
    std::copy(computedPathValue, computedPathValue + computedPathLength + 1, path);

    out = function();
}

当然,最好的办法是 havestd::string path而不是 a char[100]

于 2012-12-04T13:37:00.400 回答