Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.95/22: Рейтинг темы: голосов - 22, средняя оценка - 4.95
2 / 2 / 1
Регистрация: 28.11.2010
Сообщений: 102
1

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

05.02.2011, 20:02. Просмотров 4011. Ответов 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"
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.02.2011, 20:02
Ответы с готовыми решениями:

Аргумент типа (const char*) несовместим с параметром типа (char*). Как исправить?
#include "Table.h" #include "Contour.h" #include "TwoShape.h" #include <iostream> int...

Ошибка "значение типа "const char [81]" нельзя использовать для инициализации сущности типа "const unsigned char [61]"
Прошу помощи, так как раньше прога работала, сейчас решил вернуться и выдает ошибку: #pragma once...

Аргумент типа const char* несовместим с параметром типа char* в классе
Данную ошибку находит в 74 - 76 строках, не могу понять что не так. #include <iostream> #include...

Значение типа const char * нельзя присвоить сущности типа char *
Добрый день. Я новичок в c++ и столкнулся с проблемой при написании маленькой программы. Собственно...

6
3050 / 1455 / 492
Регистрация: 29.11.2010
Сообщений: 2,888
05.02.2011, 20:09 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;
}
1
2 / 2 / 1
Регистрация: 28.11.2010
Сообщений: 102
05.02.2011, 20:28  [ТС] 3
Получается, что в начале строки full_name еще какие то символы.
0
3050 / 1455 / 492
Регистрация: 29.11.2010
Сообщений: 2,888
05.02.2011, 20:39 4
Ну да. Первая функция должна быть не strcat, а strcpy. Очепятался.
0
2 / 2 / 1
Регистрация: 28.11.2010
Сообщений: 102
05.02.2011, 21:00  [ТС] 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);
    };
0
3050 / 1455 / 492
Регистрация: 29.11.2010
Сообщений: 2,888
05.02.2011, 21:07 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);
Конечно, вы вольны сделать как угодно, в том числе и выделять память внутри функции, а освобождать снаружи, но в боевой ситуации, особенно при командной разработке, так лучше не делать.
0
В астрале
Эксперт С++
8023 / 4780 / 654
Регистрация: 24.06.2010
Сообщений: 10,558
05.02.2011, 21:08 7
Matlabist, Гениально освобождать память в функции...
Работа вашей программы будет такая.

C++
1
2
char* str=ConnectString("one", "second");
free(str);
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.02.2011, 21:08

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как исправить ошибку: Значение типа "const char *" нельзя присвоить сущности типа "char *"?
#include &lt;conio.h&gt; #include &lt;iostream&gt; using namespace std; struct Car_Specifications {...

Аргумент типа char** не совместим с параметром типа const char*
Программа должна позволять заносить в структуру данные и выводить на экран информацию о поездах,...

Аргумент типа const char несовместим с параметром типа char
Есть код: #include &quot;stdafx.h&quot; #include &lt;windows.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; ...

Ошибка: "аргумент типа const char несовместим с параметром типа char*"
Существует много файловый проект на с++ 1)feed.cpp 2)feed.h 3)Source.cpp В файле feed.h...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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