Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Hrollo
34 / 34 / 6
Регистрация: 05.11.2013
Сообщений: 147
#1

Не работает strcat в QtCreator - C++

14.04.2014, 22:50. Просмотров 854. Ответов 23
Метки нет (Все метки)

Всем привет. Написал класс для работы со строками в Визуал студио(в ней перегруженный оператор + конкатенирует строки) в QtCreator оператор + нивкакую не хочет перегружаться, а точнее не объединяет строки, а просто выводит на екран неизмененную строку. Кто нибудь может подсказать что с ним сделать в Qt?
Вот код перегрузки
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
String String::operator+(const String &s)
{
    String temp;
    temp.len = len +s.len;
    temp.str = new char[temp.len+1];
    strcpy(temp.str,str);
    strcat(temp.str,s.str);
    return temp;
}
 
String String::operator+(const char *s)
{
    String temp;
    temp.len=len+strlen(s);
    temp.str = new char[temp.len+1];
    strcpy(temp.str,str);
    strcat(temp.str,s);
    return temp;
}
Добавлено через 4 минуты
И еще вопрос не по теме. Я гдето читал что ф-ции библиотеки cstring не будут поддерживаться стандарту. Это правда или нет?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.04.2014, 22:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не работает strcat в QtCreator (C++):

Чтение из файла в CodeBlocks работает, а в QtCreator - нет - C++
Один и тот же компилятор (LLVM Clang): в CodeBlocks код работает, в QtCreator - нет. То же самое с MinGW. Один и тот же MinGW: в...

strcat - C++
#include <iostream> #include <conio.h> #include <cstring> using namespace std; char a, b; int main() { cout <<"\n...

strcat - C++
#include <windows.h> #include <iostream> #pragma warning (disable : 4996) void Func (char* lpszFileName); void main() {...

Функция strcat - C++
Нужно написать прогу на C++ и Ассемблере...функцмя strcat(на ассемблере сделал а вот на C++ не могу).Если кто поможет буду очень...

ошибка в strcat - C++
Пишу прогу которая будет создавать файлов сколько ты захочешь :cry: но вот она выыдеает ошибку strcat' was not declared что делать ребят? ...

Работа со strcat - C++
Не могу понять в чем проблема. char *NazFile = new char; char *Tempo = new char; char *ImyaUrl = new char; NazFile =...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
IrineK
Заблокирован
15.04.2014, 15:00 #16
Проблема исчезнет, если вы обязательно замените 10-ю строку на strncpy.
strncat с пустой строкой не работает.
2
DrOffset
7152 / 4293 / 968
Регистрация: 30.01.2014
Сообщений: 7,094
15.04.2014, 16:05 #17
Цитата Сообщение от IrineK Посмотреть сообщение
strncat с пустой строкой не работает.
Согласен

Добавлено через 56 минут
Цитата Сообщение от IrineK Посмотреть сообщение
Еще проблемы?
Для завершенности:
Та же самая, но в операторе присваивания, если s.str == NULL.
Оператор вывода, тоже не учитывает NULL.
1
IrineK
Заблокирован
15.04.2014, 16:59 #18
DrOffset,
Как лучше среагировать на присвоение строки с нулевым указателем?
Проигнорировать или присвоить?

Добавлено через 32 минуты
Решила не игнорировать.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#include <iostream>
 
class String
{
public:
    String (): len(0), str(NULL) {}
    
    String (const char *_str, int _len) : len(_len)
    {   if (_len > strlen(_str))
            len = strlen(_str);
        str = new char [len + 1];
        strncpy (str, _str, len+1);
        str[len] = '\0';
    }
 
    String (const String &s)
    {   if(s.str != NULL)
        {   len = s.len;
            str = new char [len + 1];
            strncpy (str, s.str, s.len+1);
        }
        else
        {   len = 0; str = NULL; }
    }
 
    ~String ()
    {   delete [] str;
    }
 
    String &operator = (const String &s)
    {   if(s.str != NULL)
        {   if (str == s.str && len == s.len) 
            return *this;
     
            if (str != NULL)
            {   delete [] str;
                str = NULL;
            }
            len = s.len;
            str = new char [len + 1];
            strncpy (str, s.str, s.len+1);
        }
        else 
        {   delete [] str;
            str = NULL;
            len = 0;
        }
        return *this;
    }
 
    String &operator += (const String &s);
    String &operator += (const char *s);
 
    friend std::ostream &operator <<(std::ostream & os, const String &s);
 
private:
    int len;
    char *str;
};
 
String &String :: operator += (const String &s)
{  if(s.str != NULL)
   {    char * buf = new char[len + s.len + 1];
        if(str != NULL)
            strncpy(buf, str, len + 1);
        strncpy(buf + len, s.str, s.len + 1);
        len += s.len;
        delete [] str;
        str = buf;
   }
   return *this;
}
 
std::ostream &operator <<(std::ostream & os, const String &s)
{   if (s.str != NULL)
        os << s.str << " " << s.len;
    else
        os << "NULL  0";
    return os;
}
 
 
int main()
{   String s1 ("12345", 5);
    String s2 ("999", 3);
    std :: cout << s1 << '\n' << s2 << '\n';
    s1 += s2;
    std :: cout << s1 << '\n';
 
    s2 = s1;
    std :: cout << s2 << '\n';
 
    s2 += s1;
    std :: cout << s2 << '\n';
 
    String a;
    s1 = a;
    std :: cout << s1 << '\n';
    
    String b("test", 8);
    std :: cout << b<< '\n';
 
    b += b;
    std :: cout << b<< '\n';
 
    String d(a);
    std :: cout << d<< '\n';
 
    std::cin.get();
    return 0;
}
1
Hrollo
34 / 34 / 6
Регистрация: 05.11.2013
Сообщений: 147
15.04.2014, 18:01  [ТС] #19
Спасибо всем отписавшимся.
0
CEBEP
106 / 106 / 9
Регистрация: 21.03.2010
Сообщений: 440
15.04.2014, 18:08 #20
почему-то прочитал топик, стало интересно - зачем в Qt такой класс? В std::string есть ряд неудобных операций вроде вывода символа в строку и всё такое, но в QString всё куда проще и, судя по предложенным решениям, надёжнее, чем в независимой реализации...
0
IrineK
15.04.2014, 18:17
  #21

Не по теме:

Цитата Сообщение от CEBEP Посмотреть сообщение
зачем
Зачем изобретать лисапеты?
С них падать не больно )

0
DrOffset
7152 / 4293 / 968
Регистрация: 30.01.2014
Сообщений: 7,094
15.04.2014, 18:57 #22
Цитата Сообщение от CEBEP Посмотреть сообщение
В std::string есть ряд неудобных операций вроде вывода символа в строку и всё такое, но в QString всё куда проще и, судя по предложенным решениям, надёжнее, чем в независимой реализации...
Это же учебная задача.

IrineK, я бы вообще NULL убрал из возможных состояний объекта. То есть сделать два состояния: строка пустая и строка не пустая. Так проще с ней управляться, и поведением она становится похожа на стандартную std::string.
0
IrineK
Заблокирован
15.04.2014, 19:32 #23
Цитата Сообщение от DrOffset Посмотреть сообщение
сделать два состояния: строка пустая и строка не пустая
Ну, это уже в следующей теме.
Спасибо.
0
Hrollo
34 / 34 / 6
Регистрация: 05.11.2013
Сообщений: 147
15.04.2014, 19:39  [ТС] #24
Класс писал, а точнее дописывал по примеру из книги Праты и Дейтелов(писал этот класс пару месяцев назад), ну и + на лабораторной работе надо было написать свой класс для работы со строками(к сожалению всего с 2мя методами и то самыми примитивными ). Про класс string я вкурсе. В QtCreator пишу потому что преподы отказываются принимать программы с екрана в других IDE, хотя на код особо и не смотрят(((.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.04.2014, 19:39
Привет! Вот еще темы с ответами:

функция strcat - C++
Помогите разобраться, пожалуйста. char* resultat = 0; char* str = &quot;abc&quot;; strcat(resultat, str); вылетает с ошибкой. Как нужно...

Работа функции strcat() - C++
int main() { char* str = new char; strcat(str, &quot;stroka1&quot;); strcat(str, &quot;stroka2&quot;); printf(str); deletestr; } ...

Strcat или strcpy_s - C++
strcat(name, &quot; &quot;); strcat(lastname, &quot; &quot;); strcpy(name, (strcat(strcat(lastname, name), dlastname))); strcpy(nomergroup, strcat(v,...

Как применить strcat? - C++
char* strcat(char *s1, const char *s2) зачем нужны * перед strcat, s1 и s2? И как можно эту функцию применить?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
15.04.2014, 19:39
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru