c++中带文本的参数传递
Paramater passing with text in C++
我有一个赋值,我必须创建一个函数来提示用户输入文件名,并将输入传递回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;
}
问题:我不理解数组是如何工作的。当我不需要的时候,我试图通过引用传递文本。还有我应该看到的语法错误
函数原型的签名与其实现的签名不匹配。你可能认为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;
}
您没有为fileName分配任何内存。所以文件名不适合这个(零长度)缓冲区。你需要像
这样的东西char文件名[256],
同样,getFileName的函数原型与函数本身不匹配。使两个参数列表相同。
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用指向成员的指针将成员函数作为参数传递
- 如何将参数传递给正在使用模板的类
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数
- 修改函数中的指针(将另一个指针作为参数传递)
- 如何将部分流作为参数传递
- 我正在开发服务器,ip作为参数传递不起作用
- 将成员函数指针作为参数传递给模板方法
- 如何在C++中将迭代器作为函数参数传递
- 将附加参数传递给使用 beast::bind_front_handler 调用的函数
- 如何将一个类的函数作为另一个类的另一个函数的参数传递
- 将参数传递为"const"的奇怪效果
- 如何在 c++ 中将函数作为参数传递?
- 在 C++ 中将非指定类型作为参数传递的最佳方法?
- 将 QAction 的 QString 文本作为参数传递
- C++编译器如何在引用参数中实际传递文本常量?
- 将文本字符串作为常量字符 * 参数传递会导致代码分析器错误
- 将文本文件而不是用户输入作为命令行参数传递
- 将模板矢量文本作为参数传递
- c++中带文本的参数传递