Много недоразумений
1) char
не строка, это символ
2) Массив символов (например, char [64]
) не является строкой, его массив. Он может содержать строку, но это немного другая идея
3) Вы не используете [64]
, когда имеете в виду весь массив, поэтому return path[64];
не является правильным способом возврата строки.
4) Не смешивайте ввод-вывод C ++ (std::cin
, std::cout
) с C I / O (puts
, gets
), он не работает надежно, придерживайтесь C ++ Ввод / вывод, поэтому
std::cout << "Debugging: " << path << '\n';
не
std::cout << "Debugging: ";
puts(path);
5) Вы никогда не вызываете свою функцию getPath
, поэтому, конечно, она не выполняет
6) Вы не инициализируйте переменную l oop i
в конечном l oop, чтобы она не имела предсказуемого значения. Вы должны инициализировать 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 ++ значительно облегчит написание строкового кода.