Где я ошибаюсь в этом коде? Мне нужно только в типах 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)
Не используйте strcmp
, он ожидает последовательность символов с нулевым завершением. Вместо этого используйте прямое сравнение:
if (last_char == ';') ...
Кроме того, ваш код вызывает неопределенное поведение в strcat()
. my_string
был инициализирован строковым литералом, поэтому вам не разрешено изменять его, так как реализация может свободно помещать его в постоянную память (и обычно это будет делать).
Вместо этого вы можете объявить это следующим образом:
char mystring[12] = "C:/windows"; // space for one more char
;
вместо двойных кавычек?
last_char
не является строкой. Это персонаж. Вы не можете сравнить char
с строкой.
Попробуйте это вместо этого
if (last_char == ';') {...}
утверждение
strcat(mystring,";");
вызывает неопределенное поведение. Вы не можете изменить строковый литерал, поскольку он находится в разделе только для чтения в памяти.
strcmp()
, как есть, пытается преобразовать char ( last_char
) в const char *
чтобы передать его в strcmp()
, Это несовместимые типы, поэтому ошибка.
strcmp
требует char * в качестве параметра. Используйтеif(last_char == ';')