很多误解
1)char
不是字符串,而是字符
2)一个字符数组(例如char [64]
)不是一个字符串,它是一个数组。它可以容纳一个字符串,但这是一个微妙的不同想法
[64]
3)当你的意思是整个数组时,你不使用,所以return path[64];
不是返回字符串的正确方法。
4) 不要将 C++ I/O ( std::cin
, std::cout
) 与 CI/O ( puts
, gets
) 混合使用,它不能可靠地工作,坚持使用 C++ I/O 所以
std::cout << "Debugging: " << path << '\n';
不是
std::cout << "Debugging: ";
puts(path);
5)你永远不会调用你的getPath
函数,所以它当然不会执行
6)您没有i
在最终循环中初始化循环变量,因此它没有可预测的值。你应该初始化i
为0
for(int i; i < pathlen; i++){
std::cout << path[i];
应该
for(int i = 0; i < pathlen; i++){
std::cout << path[i];
正如你可以看到一个非常短的程序有很多很多错误。我将展示两种不同的正确方法来编写这个程序。
因此,在 C++ 中表示字符串有两种方式,一种是 C++ 方式,另一种是 C++ 从 C 继承。您在上面编写的代码试图以 C 方式做事,所以我将首先展示它,但是实际上,C++ 方式要容易得多。我会展示第二个,但这是你应该做事的方式。
第一种方法是使用一个字符数组来保存字符串。但是数组在 C++ 中有严重的问题。特别是不可能从函数中返回数组,因此即使您已解决所有较小的问题,上面的代码也永远无法工作。你让 C++ '返回' 一个数组的方式有点奇怪,我不会正确解释它(你需要阅读一本好的 C++ 书)。您所做的是在调用函数中声明数组并将数组作为参数传递。这是您使用这种技术编写的程序(并修复了所有其他问题)。
#include <iostream>
void getPath(char path[], int n) {
std::cout << "Input File Name For Debugging:";
std::cin.getline(path, n);
std::cout << "Debugging: " << path << '\n';
}
int main(){
char path[64];
getPath(path, 64);
std::cout << path << '\n';
return 0;
}
注意我getline
用来读取字符串,这是读取字符串的一种 C++ 方式。getline
要求您传递它要读入的数组的大小,所以我已经将它传递给getPath
了数组本身。
现在是简单的方法。C++ 有它自己的字符串类型,称为std::string
. 您根本不需要使用棘手的数组。并且可以以正常方式从函数返回 C++ 字符串类型。这使得代码更加自然。要使用 C++ 字符串类型,您需要做的就是#include <string>
. 这是您的程序重写为使用 C++ 字符串类型
#include <iostream>
#include <string>
std::string getPath() {
std::cout << "Input File Name For Debugging:";
std::string path;
std::getline(std::cin, path);
std::cout << "Debugging: " << path << '\n';
return path;
}
int main(){
std::string path;
path = getPath();
std::cout << path << '\n';
return 0;
}
请注意,第二个程序更接近您的原始代码,getPath
有一个返回类型,只是它std::string
不是char
,它有一个return
返回路径的语句。这是您应该编写此代码的方式,C++ 字符串类型将使您更轻松地编写字符串代码。