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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.74
Matlabist
2 / 2 / 0
Регистрация: 28.11.2010
Сообщений: 102
#1

Как присоединить одну строку к другой типа const char * - C++

05.02.2011, 20:02. Просмотров 2504. Ответов 6
Метки нет (Все метки)

Создаю группу файло, передаю путь. Нужно соединить строки.

C++
1
2
const char *path="C:\\Program Files\\Microsoft Visual Studio\\MyProjects\\";
const char *file="1.txt"
Как получить?
C++
1
const char *file_="C:\\Program Files\\Microsoft Visual Studio\\MyProjects\\1.txt"
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.02.2011, 20:02     Как присоединить одну строку к другой типа const char *
Посмотрите здесь:
Аргумент типа WCHAR* не совместим с параметром типа const char* C++
Аргумент типа "unsigned char*" несовместим с параметром типа "const char*" C++
Const char несовместим с параметром типа FILE C++
C++ Чем отличаются объявления const char* и const* char
Копировать пустую строку в const char* Конструктор структуры (класса) C++
C++ Как вставить строку типа char по индексу в массив?
C++ Error: значение типа "const char" нельзя присвоить сущности типа "double"
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
2923 / 1352 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
05.02.2011, 20:09     Как присоединить одну строку к другой типа const char * #2
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <string.h>
#include <stdlib.h>
 
int main(int argc, char **argv) {
  const char *path="C:\\Program Files\\Microsoft Visual Studio\\MyProjects\\";
  const char *file="1.txt";
 
  char *full_name = (char*)malloc(strlen(path) + strlen(file) + 1);
  strcat(full_name, path);
  strcat(full_name, file);
 
  free(full_name);
  return 0;
}
Matlabist
2 / 2 / 0
Регистрация: 28.11.2010
Сообщений: 102
05.02.2011, 20:28  [ТС]     Как присоединить одну строку к другой типа const char * #3
Получается, что в начале строки full_name еще какие то символы.
lemegeton
2923 / 1352 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
05.02.2011, 20:39     Как присоединить одну строку к другой типа const char * #4
Ну да. Первая функция должна быть не strcat, а strcpy. Очепятался.
Matlabist
2 / 2 / 0
Регистрация: 28.11.2010
Сообщений: 102
05.02.2011, 21:00  [ТС]     Как присоединить одну строку к другой типа const char * #5
Такой вопрос возник. Я написал функцию которая строки соединяет.
Но теперь получается память нельзя будет освободить!
После return функция выходит, и нельзя освободить память free(full_name);
Можно наверное сделаь вот так
void ConnectString(const char *f1,const char *f2,const char *&f3)
Чтоб было в f3 результат. Не понимаю как описать f3. Вот так const char *&f3 ?
C++
1
2
3
4
5
6
7
8
    const char *ConnectString(const char *f1,const char *f2)
    {
        char *full_name = (char*)malloc(strlen(f1) + strlen(f2) + 1);
        strcpy(full_name, f1);
        strcat(full_name, f2);
        return full_name;
        free(full_name);
    };
lemegeton
2923 / 1352 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
05.02.2011, 21:07     Как присоединить одну строку к другой типа const char * #6
Дык, братишка, это... Опаньки. Потому и придумали умные указатели, что непонятно, кто память освобождать будет. Исторически сложилось так, что память выделяется "снаружи" подобных функции. Т.е. так, как выполнена функция strcpy, которая принимает первым параметром указатель на уже выделенную область памяти. Так что такой подход отпадает. Зато эти функции возвращают указатель на получившуюся строку, так что можно создавать сложные однострочные конструкции.

C
1
2
3
  char *full_name = strcat(strcpy((char*)malloc(strlen(path) + strlen(file) + 1), path), file);
  printf("%s\n", full_name);
  free(full_name);
Конечно, вы вольны сделать как угодно, в том числе и выделять память внутри функции, а освобождать снаружи, но в боевой ситуации, особенно при командной разработке, так лучше не делать.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.02.2011, 21:08     Как присоединить одну строку к другой типа const char *
Еще ссылки по теме:
Подскажите, как создать одномерную, динамическую строку типа char C++
C++ Как сравнить char и const char?
C++ Читать строку типа string из файла, разбить ее на массив слов типа char
C++ Аргумент типа "const char*" несовместим с параметром типа "LPCWSTR"
C++ Перевести строку типа char в массив типа int

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

Или воспользуйтесь поиском по форуму:
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
05.02.2011, 21:08     Как присоединить одну строку к другой типа const char * #7
Matlabist, Гениально освобождать память в функции...
Работа вашей программы будет такая.

C++
1
2
char* str=ConnectString("one", "second");
free(str);
Yandex
Объявления
05.02.2011, 21:08     Как присоединить одну строку к другой типа const char *
Ответ Создать тему
Опции темы

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