powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / strcat - ошибка
25 сообщений из 62, страница 1 из 3
strcat - ошибка
    #38042313
MaximuS_G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет. Не могу разобраться, как правильно работать с strcat.
Пишу такое, и получаю ошибку:
Код: plaintext
1.
2.
3.
char *myString = "hello";
char *stringResult;
stringResult = strcat(myString,"as");


Что делаю неправильно?
[strcat] возвращает указатель, я его значение присваиваю другому указателю. Это как вот такое сделать:
Код: plaintext
1.
2.
3.
char *myString = "hello";
char *stringResult;
stringResult = myString;


Так все работает.
Заранее спасибо за помощь!
...
Рейтинг: 0 / 0
strcat - ошибка
    #38042315
Westtrd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaximuS_G,

Кто память будет выделять?
...
Рейтинг: 0 / 0
strcat - ошибка
    #38042317
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximuS_GВсем привет. Не могу разобраться, как правильно работать с strcat.
Пишу такое, и получаю ошибку:
Код: plaintext
1.
2.
3.
char *myString = "hello";
char *stringResult;
stringResult = strcat(myString,"as");


Что делаю неправильно?
Строка:
char *myString = "hello";
Означает: Выделить в памяти принадлежащей сегменту кода кусочек в шесть байт, записать туда пять букв h, e, l, l, o и закончить нулем. После этого выделить на стеке кусочек памяти размером в адрес и записать в эту память адрес первого куска.


char *stringResult;
Означает: Выделить на стеке кусочек памяти размером в адрес, ничего туда не писать.

stringResult = strcat(myString,"as");
Означает: Найти в первом куске памяти (который длиной шесть байт) нулевой байт. Записать на место этого нулевого байта букву a, потом в следующий байт записать букву s, потом записать ноль. Потом записать адрес первого куска памяти в третий.

А если теперь внимательно подумать, мы сможем заметить что когда в самом начале мы выделяли первый кусок в шесть байт размером мы не оговаривали что будет находится после него. Соотвественно когда мы пишем седьмую букву s эта буква попадает в неизвестно куда с неизвестно какими последствиями. Вариантов последствий очень много, и все они зависят от конкретной OS в которой ты пытаешься это сделать, компилятора который ты используешь и даже настроек этого компилятора.
В некоторых случаях это может даже работать и ты ничего не заметишь. Но к счастью, в данном случае ты "получил ошибку", рискну предположить что это "попытка записи в сегмент для чтения", так?
...
Рейтинг: 0 / 0
strcat - ошибка
    #38042318
MaximuS_G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Westtrd
Спасибо за подсказку. Но ведь во втором примере не выделяется память?
Или в первом примере нужно выделять память под "hello", и под "helloas"? Ну так я тоже получаю ошибку:
Код: plaintext
1.
2.
3.
char *myString = "hello";
char *stringResult = new char[10];
stringResult = strcat(myString,"as");
...
Рейтинг: 0 / 0
strcat - ошибка
    #38042320
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owlрискну предположить что это "попытка записи в сегмент для чтения", так?

Если у него достаточно свежий компилятор, то это скорее сообщение о несовместимости char*
и const char* ещё при компиляции.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
strcat - ошибка
    #38042321
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximuS_G Westtrd
Спасибо за подсказку. Но ведь во втором примере не выделяется память?
Или в первом примере нужно выделять память под "hello", и под "helloas"? Ну так я тоже получаю ошибку:
Код: plaintext
1.
2.
3.
char *myString = "hello";
char *stringResult = new char[10];
stringResult = strcat(myString,"as");

А так, память которую ты выделил во второй строке просто теряется. В третей строке ты перенаправляешь указатель на "hello" а те десять байт остаются висеть всеми забытыми. Ты их теперь даже освободить не можешь, потому что не знаешь где они находятся.
...
Рейтинг: 0 / 0
strcat - ошибка
    #38042322
MaximuS_G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибка такая
Unhandled exception at 0x0f74d32a in 17.11.exe: 0xC0000005: Access violation writing location 0x0020bc71.
White Owl
Спасибо за подробно расписанное объяснение. Но постом выше я привел кусок кода, где я выделяю память, но все равно получаю ошибку.
...
Рейтинг: 0 / 0
strcat - ошибка
    #38042324
MaximuS_G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlMaximuS_G Westtrd
Спасибо за подсказку. Но ведь во втором примере не выделяется память?
Или в первом примере нужно выделять память под "hello", и под "helloas"? Ну так я тоже получаю ошибку:
Код: plaintext
1.
2.
3.
char *myString = "hello";
char *stringResult = new char[10];
stringResult = strcat(myString,"as");

А так, память которую ты выделил во второй строке просто теряется. В третей строке ты перенаправляешь указатель на "hello" а те десять байт остаются висеть всеми забытыми. Ты их теперь даже освободить не можешь, потому что не знаешь где они находятся.

Так а как правильно сделать? :)
...
Рейтинг: 0 / 0
strcat - ошибка
    #38042325
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximuS_GОшибка такая
Unhandled exception at 0x0f74d32a in 17.11.exe: 0xC0000005: Access violation writing location 0x0020bc71.
White Owl
Спасибо за подробно расписанное объяснение. Но постом выше я привел кусок кода, где я выделяю память, но все равно получаю ошибку.Ты не понимаешь смысла strcat(). Эта функция не манипулирует строками. Она их не копирует, и не переносит.
Она берет два указателя. Сначала она двигает первый указатель до тех пор пока он не покажет на ячейку памяти в которой записан ноль. После этого она начнет двигать оба указателя разом и копировать байтик из ячейкие на которой показывает второй указатель в ячейку на которую показывает первый, до тех пока второй указатель не покажет на ячейку с нулем.
После этого strcat() вернет копию первого указателя каким он был в самом начале.
Так понятно?

И вообще, разберись пожалуйста на каком языке ты пишешь. На C или C++? Не надо их смешивать, они хоть и похожие, но все-же разные.
...
Рейтинг: 0 / 0
strcat - ошибка
    #38042326
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximuS_GWhite Owlпропущено...
А так, память которую ты выделил во второй строке просто теряется. В третей строке ты перенаправляешь указатель на "hello" а те десять байт остаются висеть всеми забытыми. Ты их теперь даже освободить не можешь, потому что не знаешь где они находятся.

Так а как правильно сделать? :)А вот это ты должен сам догадаться. Мы можем пояснять некоторые непонятные моменты, но если мы сделаем за тебя такую элементарную задачу - нам придется за тебя и диплом и зарплату получать. А ты ж наверное сам хочешь и диплом и зарплату?
...
Рейтинг: 0 / 0
strcat - ошибка
    #38042327
MaximuS_G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl
White Owl...Так понятно?
Спасибо, это понял. Но не пойму тогда что здесь не так:
Код: plaintext
1.
2.
3.
char *myString = "hello\0111";
myString = strcat(myString,"as");
cout<<myString;


Под myString выделено 9 байт. "\0" функция найдет, и после него еще есть место, куда приделать "as". Что не нравиться с++? :)
...
Рейтинг: 0 / 0
strcat - ошибка
    #38042332
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximuS_G White Owl
White Owl...Так понятно?
Спасибо, это понял. Но не пойму тогда что здесь не так:
Код: plaintext
1.
2.
3.
char *myString = "hello\0111";
myString = strcat(myString,"as");
cout<<myString;


Под myString выделено 9 байт. "\0" функция найдет, и после него еще есть место, куда приделать "as". Что не нравиться с++? :)С++ нравится все. А вот ОС нравится не все.
Читай внимательнее мой первый пост. То где я говорил о "сегментах".
Память она разная бывает. Бывает память на стеке, бывает на куче, бывает в сегменте данных, бывает в сегменте кода, бывает общая, бывает отображенная, много их... Вот только простой памяти не бывает. "Просто" память это из разряда беллетристики и киноляпов.
Так вот "hello" (как и "as" и "hello\0111") записываются компилятором либо в сегмент кода, либо в сегмент данных, либо в сегмент константных данных. Это зависит от компилятора и его настроек. А ОС считает что сегменты кода и сегменты константных данных это сегменты только для чтения. Писать туда нельзя вообще, а тот кто туда пишет - злобный вирус и вообще враг всего доброго и светлого, а значит должен быть убит через Access violation.
...
Рейтинг: 0 / 0
strcat - ошибка
    #38042660
MaximuS_G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl
Наверное Вы правы, я не очень понимаю, зачем нужна эта функция, и поэтому пытаюсь что-то нагородить.
Можете привести пример самый банальный использования этой функции?
У меня следующая задача.
Есть структура, и я хочу ее свойства записать в другое свойство через слеш:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
struct videoShop
{
	char *movieName;
	char *producer;
	char *compString;
};

videoShop object1;
object1.movieName = "robocop";
object1.producer = "cameron";


У меня задача получить в object1.compString такую строку "robocop/cameron" . Вот я и хотел объединить эти свойства с помощью функции strcat .
...
Рейтинг: 0 / 0
strcat - ошибка
    #38042679
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximuS_G,
Если вы уже используете С++ так используйте все его возможности
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
#include <string>
struct videoShop
{
	std::string movieName;
	std::string producer;
	std::string compString;
};

int main()
{
  videoShop object1;
  object1.movieName = "robocop";
  object1.producer = "cameron";
  object1.compString = object1.movieName + "/" + object1.producer;
  return 0;
}



Или обоснуйте почему надо использовать именно С-шные строки (char*).
...
Рейтинг: 0 / 0
strcat - ошибка
    #38042683
MaximuS_G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky
Спасибо за подсказку. Я просто еще не учил класс string.
Буду знать, что так можно, так конечно для моего восприятия легче - я на javascript пишу :).
Но сейчас хочу разобраться как работать со строками как с массивом char, вдруг в будущем понадобиться.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
int main()
{
  videoShop object1;
  object1.movieName = "robocop";
  object1.producer = "cameron";
  object1.compString = object1.movieName + "/" + object1.producer;
  return 0;
}


Подскажите, пожалуйста, а зачем Вы объявляете функцию main как такую, которая возвращает значение int?
...
Рейтинг: 0 / 0
strcat - ошибка
    #38042689
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximuS_GПодскажите, пожалуйста, а зачем Вы объявляете функцию main как такую, которая возвращает значение int?
Хотя многие компиляторы пропускают и void, но по стандарту положено int. (Возвращаемый из main код - это код выхода приложения, 0 - нормальный выход, не 0 - ошибка )
...
Рейтинг: 0 / 0
strcat - ошибка
    #38042690
На чистом C
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaximuS_G White Owl
Наверное Вы правы, я не очень понимаю, зачем нужна эта функция, и поэтому пытаюсь что-то нагородить.
Можете привести пример самый банальный использования этой функции?
У меня следующая задача.
Есть структура, и я хочу ее свойства записать в другое свойство через слеш:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
struct videoShop
{
	char *movieName;
	char *producer;
	char *compString;
};

videoShop object1;
object1.movieName = "robocop";
object1.producer = "cameron";


У меня задача получить в object1.compString такую строку "robocop/cameron" . Вот я и хотел объединить эти свойства с помощью функции strcat .

На чистом C это так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
#include <stdio.h>
#include <string.h>

struct videoShop
{
	char movieName[50];
	char producer[50];
	char compString[50];
};


int main(void) {
 struct videoShop object1;
 strcpy(object1.movieName, "robocop");
 strcpy(object1.producer, "cameron");

 strcat(object1.compString, object1.movieName);
 strcat(object1.compString, "/");
 strcat(object1.compString, object1.producer);
 printf ("str1: %s\nstr2: %s\nstr3: %s\n", 
  object1.movieName, object1.producer, object1.compString);

 return 0;
}



На С++ как у Anatoly Moskovsky.
...
Рейтинг: 0 / 0
strcat - ошибка
    #38042692
Anatoly MoskovskyMaximuS_GПодскажите, пожалуйста, а зачем Вы объявляете функцию main как такую, которая возвращает значение int?
Хотя многие компиляторы пропускают и void, но по стандарту положено int. (Возвращаемый из main код - это код выхода приложения, 0 - нормальный выход, не 0 - ошибка )
А параметры в скобках функции main по стандарту обязательны или там что угодно допускается?
...
Рейтинг: 0 / 0
strcat - ошибка
    #38042701
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На чистом CНа чистом C это так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
#include <stdio.h>
#include <string.h>

struct videoShop
{
	char movieName[50];
	char producer[50];
	char compString[50];
};


int main(void) {
 struct videoShop object1;
 strcpy(object1.movieName, "robocop");
 strcpy(object1.producer, "cameron");

 strcat(object1.compString, object1.movieName);
 strcat(object1.compString, "/");
 strcat(object1.compString, object1.producer);
 printf ("str1: %s\nstr2: %s\nstr3: %s\n", 
  object1.movieName, object1.producer, object1.compString);

 return 0;
}

Жуть! не надо так писать.
Ошибка раз - помрет если строки movie и producer будут в сумме длиннее 50 символов.
Ошибка два - чистить надо приемный буфер прежде чем что-то к нему приклеивать.


Код: plaintext
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.
struct videoShop
{
	char *movieName;
	char *producer;
	char *compString;
};

int main() {
   videoShop object1;
   object1.movieName = "robocop";
   object1.producer = "cameron";

   // сначала выделить память под приемник
   object1.compString = malloc( strlen(object1.movieName) + strlen(object1.producer) + 2);

   // потом копировать
   strcpy(object1.compString, object1.movieName);
   strcat(object1.compString, "/");
   strcat(object1.compString, object1.producer);

   // а можно проще:
   sprintf(object1.compString, "%s/%s", object1.movieName, object1.producer);

   return 0;
}
...
Рейтинг: 0 / 0
strcat - ошибка
    #38042709
MaximuS_G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На чистом CНа чистом C это так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
#include <stdio.h>
#include <string.h>

struct videoShop
{
	char movieName[50];
	char producer[50];
	char compString[50];
};


int main(void) {
 struct videoShop object1;
 strcpy(object1.movieName, "robocop");
 strcpy(object1.producer, "cameron");

 strcat(object1.compString, object1.movieName);
 strcat(object1.compString, "/");
 strcat(object1.compString, object1.producer);
 printf ("str1: %s\nstr2: %s\nstr3: %s\n", 
  object1.movieName, object1.producer, object1.compString);

 return 0;
}


Спасибо за ответ. Вы тоже используете функци strcat , вот я не могу понять, почему у меня не получалось. Сейчас буду думать, чем мой вариант отличается.
И у меня паралельный вопрос появился - вы создаете структуру и сразу определяете максимальное количество элементов в свойствах. Я создаю структуру с указателями, и потом в коде сколько мне понадобиться символов, столько я и создам, а потом скопирую указатель на массив. Чем такой подход плох?
Спасибо!
...
Рейтинг: 0 / 0
strcat - ошибка
    #38042711
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximuS_G Anatoly Moskovsky
Спасибо за подсказку. Я просто еще не учил класс string.
Буду знать, что так можно, так конечно для моего восприятия легче - я на javascript пишу :).
Но сейчас хочу разобраться как работать со строками как с массивом char, вдруг в будущем понадобиться.


Про строки как массив (С-строки).

Первое что надо понимать, что "строка" это константа являющаяся массивом char. Даже если какие-то компиляторы и позволяют изменить эту константу - это баг (хотя в первую очередь это баг в ваше программе).

Дальше.
char* s - это не сама строка, а указатель на строку (массив char).
Массив char (а значит и строку) можно присвоить в указатель, но при этом присваивается не сам массив, а указатель на его начало.
Код: plaintext
1.
2.
const char* s = "aaa"; // присваиваем указатель на "ааа". 
// const - чтобы не было попыток модифицировать через указатель константу на которую он указывает



Дальше. Мы можем объявить явно массив char и присвоить ему строку/массив. В этом случае создается копия, котоая уже не константа.
Код: plaintext
1.
char s[] = "aaa"; //  массив размером 4 (включая завершающий 0) и скопировали туда строку



Чаще всего размер строки на этапе компиляции неизвестен, поэтому обычно такие массивы (их еще называют статическими, т.к. их размер вычисляется при компиляции и не может меняться при исполнении программы) не применяют, а применяют динамическое выделение памяти через new.
Определяют размер строки через strlen, потом выделяют динамический массив через malloc(len +1 ) или new char[len + 1] (помним про завершающий 0, который не учитывается strlen), потом копируют strcpy. Для случая malloc, есть стандартная функция для всего процесса копирования - strdup.
malloc/new возвращает указатель на созданный динамический массив.
При этом если у нас два указателя, один на статический а другой на динамический массив, то компилятор никак не различает их. В обоих случаях это char*.

Теперь важное. Память выделенную через malloc/new надо освобождать вручную через free/delete. А статический массив наоборот - не надо удалять. Но если мы имеем просто указатель, то мы не знаем это указатель на статический массив или динамический. И не можем принять решение удалять или нет.

Тут есть два варианта. 1) - я его считаю неудачным и никогда не применяю - хранить в структуре вместе с указателем и флаг типа bool с признаком динамического массива (как наиболее тупая вариация - флаг не хранить а помнить что такое-то поле в структуре это динамический массив)
2) Всегда использовать динамические массивы когда в структуре данных хранятся указатели на строки. В случае если строка задана литералом "ааа" то копировать ее в динамический массив.

Таким образом применяя все вышеперечисленное к последнему примеру получаем такое (так как речь все-таки про С, то используем С-шный malloc/free):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
struct videoShop
{
	char *movieName;
	char *producer;
	char *compString;
};

int main()
{
  struct videoShop object1;
  object1.movieName = strdup("robocop"); // скопировали встроенной ф-ей
  object1.producer = strdup("cameron"); // скопировали 
  // тут сначала выделяем память под всю конечную строку включая 0
  object1.compString = (char*)malloc(strlen(object1.movieName) + strlen("/") + strlen(object1.producer) + 1);
  strcpy(object1.compString, object1.movieName); // копируем сначала первую часть строке
  strcat(object1.compString, "/"); // добавляем /
  strcpy(object1.compString, object1.producer); // добавляем вторую часть
  ...
  // удаляем все строки
  free(object1.movieName);
  free(object1.producer);
  free(object1.compString);
  return 0;
}
...
Рейтинг: 0 / 0
strcat - ошибка
    #38042715
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут была опечатка: strcpy в третьей строке должно быть strcat
Код: plaintext
1.
2.
3.
  strcpy(object1.compString, object1.movieName); // копируем сначала первую часть строке
  strcat(object1.compString, "/"); // добавляем /
  strcat(object1.compString, object1.producer); // добавляем вторую часть
...
Рейтинг: 0 / 0
strcat - ошибка
    #38042724
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в скобках функции mainА параметры в скобках функции main по стандарту обязательны или там что угодно допускается?
Их можно опускать справа налево.
...
Рейтинг: 0 / 0
strcat - ошибка
    #38042732
На чистом C
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White OwlНа чистом CНа чистом C это так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
#include <stdio.h>
#include <string.h>

struct videoShop
{
	char movieName[50];
	char producer[50];
	char compString[50];
};


int main(void) {
 struct videoShop object1;
 strcpy(object1.movieName, "robocop");
 strcpy(object1.producer, "cameron");

 strcat(object1.compString, object1.movieName);
 strcat(object1.compString, "/");
 strcat(object1.compString, object1.producer);
 printf ("str1: %s\nstr2: %s\nstr3: %s\n", 
  object1.movieName, object1.producer, object1.compString);

 return 0;
}

Жуть! не надо так писать.
Ошибка раз - помрет если строки movie и producer будут в сумме длиннее 50 символов.
Ошибка два - чистить надо приемный буфер прежде чем что-то к нему приклеивать.


Код: plaintext
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.
struct videoShop
{
	char *movieName;
	char *producer;
	char *compString;
};

int main() {
   videoShop object1;
   object1.movieName = "robocop";
   object1.producer = "cameron";

   // сначала выделить память под приемник
   object1.compString = malloc( strlen(object1.movieName) + strlen(object1.producer) + 2);

   // потом копировать
   strcpy(object1.compString, object1.movieName);
   strcat(object1.compString, "/");
   strcat(object1.compString, object1.producer);

   // а можно проще:
   sprintf(object1.compString, "%s/%s", object1.movieName, object1.producer);

   return 0;
}


С динамической памятью кэш-промахов будет много. Да и выделение/освобождение помимо тормозов, не менее опасно забыть освободить память или обратиться к ранее освобожденной, чем выйти за пределы статического массива.


А насчет чистки, согласен, но вполне достаточно \0 в конце каждой строки.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
#include <stdio.h>
#include <string.h>

struct videoShop
{
	char movieName[50];
	char producer[50];
	char compString[50];
};


int main(void) {
 struct videoShop object1;
 strcpy(object1.movieName, "robocop\0 aaa");  // edit
 strcpy(object1.producer, "cameron\0");       // edit

 strcpy(object1.compString, object1.movieName);  // edit
 strcat(object1.compString, "/");
 strcat(object1.compString, object1.producer);
 printf ("str1: %s\nstr2: %s\nstr3: %s\n", 
  object1.movieName, object1.producer, object1.compString);

 return 0;
}
...
Рейтинг: 0 / 0
strcat - ошибка
    #38042736
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На чистом Cвполне достаточно \0 в конце каждой строки.
А что, без этого там терминаторов не будет?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25 сообщений из 62, страница 1 из 3
Форумы / C++ [игнор отключен] [закрыт для гостей] / strcat - ошибка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]