此代码中哪里出错了?我只需要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)
答案 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,";");
调用未定义的行为。您无法修改字符串文字,因为它位于内存的只读部分。