C++ 这里有非法进入吗?
我正在检查字符串中的字母数字字符,并希望构建一个文件系统 我尝试过递归地使用Fnameisaln,但它给了我一个无效的指针,被中止(核心转储错误) 调试时-“程序接收信号SIGABRT,中止” 也许我不能修改成员字符串两次?有这样的规定吗C++ 这里有非法进入吗?,c++,C++,我正在检查字符串中的字母数字字符,并希望构建一个文件系统 我尝试过递归地使用Fnameisaln,但它给了我一个无效的指针,被中止(核心转储错误) 调试时-“程序接收信号SIGABRT,中止” 也许我不能修改成员字符串两次?有这样的规定吗 class File { public: std::string n; File(char str[]) { n = Fnameisaln(str); } std::string Fnamei
class File
{
public:
std::string n;
File(char str[]) {
n = Fnameisaln(str);
}
std::string Fnameisaln(char a[]);
};
std::string File::Fnameisaln(char b[]) {
int i = 0;
bool isaln = false;
while(b[i]!='\0'){
if(isalnum(b[i])) {
isaln=true;
i++;
std::cout<< "\nWorking\n";
}
else {
isaln=false;
std::cout << "Warning!\n";
break;
}
}// (while loop for checking if alphanumeric)
if(isaln) {
std::string s = b;
std::cout << "\n W2 \n"; // to check if working
return s;
}
else {
std::cout << "Please enter file name again-\n";
std::cin >> b;
n.assign(Fnameisaln(b)); // n=Fnameisaln(b) also tried
}
}
类文件
{
公众:
std::字符串n;
文件(char str[]){
n=Fnameisaln(str);
}
std::字符串Fnameisaln(char a[]);
};
std::string File::Fnameisaln(char b[]){
int i=0;
bool-isaln=false;
而(b[i]!='\0'){
if(isalnum(b[i])){
isaln=真;
i++;
std::cout此代码存在问题-
- 他并不总是回来
- 正在使用带字符串的冗余字符数组
- 使用的变量太多
- 没有使用对字符串的引用
工作溶液-
class File{
public:
std::string n;
File(std::string n){
this->n=Fnameisaln(n);
};
std::string Fnameisaln(std::string& n);
void printn();
};
void File::printn(){
std::cout << this->n << "\n";
}
std::string File::Fnameisaln(std::string& b){
int i=0;
bool isaln=false;
while(b[i]!='\0'){
if(isalnum(b[i])) {
isaln=true;
i++;
}
else {
isaln=false;
std::cout << "Warning!\nOnly letters and numbers allowed!\n";
break;
}
}
if(isaln) {
return b;
}
else {
std::cout << "Please enter file name again-\n";
std::cin >> b;
n=Fnameisaln(b);
return n;
}
}
类文件{
公众:
std::字符串n;
文件(std::string n){
这->n=Fnameisaln(n);
};
std::string Fnameisaln(std::string&n);
void printn();
};
无效文件::printn(){
std::无法修复缩进并显示完整的代码。Fnameisaln
并不总是返回值。编译器至少应该警告您这一点,更重要的是这应该是一个错误。为什么要使用字符数组和std::string
?您应该传递std::string
(通过引用)请显示完整的代码。错误可能不在您认为的地方——可能在您剪掉的代码中(特别是当您有一个while循环正在扫描字符时,这种错误已经成熟)。你把它放在调试器中了吗?调试器会在大约5秒钟内告诉你问题出在哪里。你的类似乎有点过头了。太多东西了,当一个简单的文件名字符串可以工作时。