与字符串文字C ++比较

时间:2015-03-16 21:38:03

标签: c++ if-statement

我正在编写一个允许学生复制模板文本文件的程序的函数。此功能检查用户的输入,以查看他的课程是否允许他所需的模板。

我收到错误"与字符串文字的比较导致未指定的行为"在第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;
}

3 个答案:

答案 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()类似