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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.74
Matlabist
2 / 2 / 0
Регистрация: 28.11.2010
Сообщений: 98
05.02.2011, 20:02     Как присоединить одну строку к другой типа const char * #1
Создаю группу файло, передаю путь. Нужно соединить строки.

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"
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
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
Сообщений: 98
05.02.2011, 20:28  [ТС]     Как присоединить одну строку к другой типа const char * #3
Получается, что в начале строки full_name еще какие то символы.
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
05.02.2011, 20:39     Как присоединить одну строку к другой типа const char * #4
Ну да. Первая функция должна быть не strcat, а strcpy. Очепятался.
Matlabist
2 / 2 / 0
Регистрация: 28.11.2010
Сообщений: 98
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
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
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 *
Еще ссылки по теме:

C++ Как вставить строку типа char по индексу в массив?
Аргумент типа "unsigned char*" несовместим с параметром типа "const char*" C++
Копировать пустую строку в const char* Конструктор структуры (класса) C++

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

Или воспользуйтесь поиском по форуму:
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 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 *
Ответ Создать тему
Опции темы

Текущее время: 23:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru