我正在编写一个允许学生复制模板文本文件的程序的函数。此功能检查用户的输入,以查看他的课程是否允许他所需的模板。
我收到错误"与字符串文字的比较导致未指定的行为"在第21和25行。我已经完成了" cout<<命名"验证变量是否正确存储,它是,所以我知道这不是问题。
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
//TEMPLATE CHECK
//First you check to see if the student is allowed to use the template
int templateCheck()
{
//Declare file name variable
char name[256];
//Prompt for user input
cout << "Enter file name: ";
//Cin user input
cin >> name;
//Begin check
//CS221 is the first template you can't use
if(name == "/home/cs221Temp.txt")
cout << "You are not allowed to use CS221 templates./n";
//CS 321 is the other template you can't use
else if (name == "/home/cs321Temp.txt")
cout << "You are not allowed to use CS321 templates./n";
//Any others are okay (I commented these out since I'm just working on this function by itself)
//else
//copyTemplate();
return 0;
}
答案 0 :(得分:2)
本声明
if(name == "/home/cs221Temp.txt")
比较指针是否相等(不太可能),而不是它们的内容 你真正想要的是
if(strncmp(name,"/home/cs221Temp.txt",256) == 0)
或
std::string name;
在你的功能中。
答案 1 :(得分:1)
您无法通过==
比较两个C风格的字符串。 (C风格的字符串文字只是给你一个指向RAM中字符序列中第一个字符的指针,以0值字符结束,所以你要比较地址而不是字符串。)
您要使用的是来自strcmp
的{{1}}函数。
但是,你正在编写C ++,而不是C.
所以,我建议使用{em> 重载stdlib
运算符的string
类,这样你可以做
==
答案 2 :(得分:0)
在C / C ++中(与JavaScript类似的“类似”语言不同)当你在“字符串”上使用==
时,你正在比较指针。
如果要比较字符串的内容,则必须使用为此目的设计的函数。与标准C库中的strcmp()
类似