strcmp [c ++]错误:从'char'到'const char *'的无效转换[-fpermissive]

时间:2013-12-25 13:09:47

标签: c++ pointers char strcmp

此代码中哪里出错了?我只需要char种类型,请不要建议使用std::string

#include <iostream>
#include <string.h>
using namespace std;

int main() 
{
    char *mystring="C:/windows";
    char last_char;
    last_char = mystring[strlen(mystring)-1];
    cout<<"Input: " <<mystring<<endl;
    if(strcmp(last_char,";")!=0)
    {
        strcat(mystring,";");
    }
    cout<<"Output: "<<mystring<<endl;
    return 0;
}

输出:

    Compilation error    time: 0 memory: 3340 signal:0
prog.cpp: In function ‘int main()’:
prog.cpp:7:17: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
  char *mystring="C:/windows";
                 ^
prog.cpp:11:25: error: invalid conversion from ‘char’ to ‘const char*’ [-fpermissive]
  if(strcmp(last_char,";")!=0)
                         ^
In file included from prog.cpp:2:0:
/usr/include/string.h:140:12: error:   initializing argument 1 of ‘int strcmp(const char*, const char*)’ [-fpermissive]
 extern int strcmp (const char *__s1, const char *__s2)

2 个答案:

答案 0 :(得分:5)

不要使用strcmp,它需要一个空终止的字符序列。相反,使用直接比较:

if (last_char == ';') ...

此外,您的代码在strcat()调用中调用未定义的行为。 my_string已使用字符串文字进行初始化,因此,您不能修改它,因为实现可以将其放在只读内存中(通常会这样做)。

你可以这样声明:

char mystring[12] = "C:/windows"; // space for one more char

答案 1 :(得分:1)

last_char不是字符串。这是一个角色。您无法将char与字符串进行比较 试试这个

 if (last_char == ';') {...}  

声明

 strcat(mystring,";");

调用未定义的行为。您无法修改字符串文字,因为它位于内存的只读部分。