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

use*_*070 0 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;
}
Run Code Online (Sandbox Code Playgroud)

输出:

    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)
Run Code Online (Sandbox Code Playgroud)

Fil*_*ves 5

不要使用strcmp,它期望一个空终止字符序列.相反,使用直接比较:

if (last_char == ';') ...
Run Code Online (Sandbox Code Playgroud)

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

您可以这样声明它:

char mystring[12] = "C:/windows"; // space for one more char
Run Code Online (Sandbox Code Playgroud)