参数在C ++中传递文本

时间:2013-06-01 16:13:31

标签: c++ parameter-passing pass-by-reference

O有一个赋值,我必须在其中创建一个函数来提示用户输入文件名并将输入传递回main。我必须将它作为参数传递(我假设这意味着传递引用。)我只是在处理第一个函数“getFileName”。我知道在C ++中有更简单的方法可以做到这一点,但我被指示这样做,我确信这里有一些值得学习的东西,但我并没有把握它。在任何情况下,我都可以使函数与整数一起使用:

#include <iostream>
using namespace std;    

void getFileName(int &fileName);

int main()
{
   int fileName;
   getFileName(fileName);
   cout << fileName;
   return 0;
}

void getFileName(int &fileName)
{
   cout << "Please enter the filename: ";
   cin >> fileName;
   return;
}

当我尝试将整数更改为文本时,我的问题就出现了。我被告知要使用原型:

void getFileName(char []); 

我尝试的一切都给了我错误,主要是设置指向数组的指针,或者设置对数组的引用等等。我目前的代码如下:

#include <iostream>
using namespace std;

void getFileName(char &fileName[]);

int main()
{
   char fileName[];
   getFileName(fileName);
   cout << fileName;
   return 0;
}
void getFileName(char &fileName)
{
   cout << "Please enter the filename: ";
   cin >> fileName;
   return;
}

我得到了g ++的错误:

assign26.cpp:19: error: declaration of ‘fileName’ as array of references
assign26.cpp: In function ‘int main()’:
assign26.cpp:23: error: storage size of ‘fileName’ isn't known

虽然给我修复问题的代码可以帮助我完成任务,但我确实想了解发生了什么,所以请解释一下解决方案。我非常感谢所有帮助。

修改

这是有效的代码,感谢本网站的成员提供所有帮助!

void getFileName(char fileName[]);

int main()
{
   char fileName[256];
   getFileName(fileName);
   cout << fileName;
   return 0;
}

void getFileName(char fileName[])
{
   cout << "Please enter the filename: ";
   cin >> fileName;
   return;
}

问题:我不明白数组是如何运作的。当我不需要时,我试图通过引用传递文本。还有我应该看到的语法错误。

2 个答案:

答案 0 :(得分:0)

您尚未为fileName分配任何内存。因此文件名不适合该(零长度)缓冲区。你需要像

这样的东西

char fileName [256];

此外,getFileName的函数原型与函数本身不匹配。使两个参数列表相同。

答案 1 :(得分:0)

您的函数原型的签名与其实现的签名不匹配。您可能认为char& x[]与参数列表中的char& x相同,但它们实际上非常不同。第一个声明一个字符引用数组,最后一个声明一个字符引用。标准不允许引用数组,因此不可能,并且在这种情况下不需要通过引用传递数组(我怀疑你试图这样做)。

在你的帖子中你说你想插入文字。如果是这种情况,您只需要一个字符数组。您的签名现在应该类似于:

void getFileName(char fileName[]);

此外,在main内部,您声明了一个未知边界的数组fileName。由于必须指定维度,因此不允许这样做。类似的东西:

char fileName[256];

但是如果你不知道用户输入了多少个字符,你应该动态分配数组。例如,使用std::string

#include <string>

void getFileName(std::string &);

int main()
{
    std::string fileName;
    getFileName(fileName);
}

void getFileName(std::string& fileName)
{
    std::cout << "Please enter the filename: ";
    std::cin >> fileName;
}