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

Strncat - C++

Восстановить пароль Регистрация
 
Ринат
0 / 0 / 0
Регистрация: 29.05.2014
Сообщений: 77
31.05.2014, 21:54     Strncat #1
Пытаюсь с помощью этой функции соединить две строки, ничего не получается помогите плз я уже просто не понимаю:
Вот код там все элементарно но ругается на саму команду strncat:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <stdio.h>  // Для printf
#include <string.h> // Для strncat
int main (void)
{
   // Массивы в которые добавляется строка
   char src1[]="book";
   char src2[]="boot";
   // Добавление строки  в строку src1
   strncat(src1, scr2,size_t size);
   // Вывод результата
   printf (scr1);
   return (0);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.05.2014, 21:54     Strncat
Посмотрите здесь:

Применение strncat в VS 2008 выдает ошибку.. C++
аналог функции STRNCAT() C++
аналог функции STRNCAT(). C++
аналог функции STRNCAT(). C++
C++ реализовать strncat(s1,s2,n)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
31.05.2014, 22:23     Strncat #2
C++
1
2
3
4
char src1[100]="book";
   char src2[]="boot";
   // Добавление строки  в строку src1
   strncat(src1, scr2, sizeof(src1));
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
31.05.2014, 23:30     Strncat #3
Цитата Сообщение от Jupiter Посмотреть сообщение
C++
1
strncat(src1, scr2, sizeof(src1));
Плохо. Не считая очепятки, размер должен быть указан относительно второго аргумента, т.е. сколько символов будет добавлено в итоговую строку. Поэтому, скорее всего должно быть так:
C++
1
strncat(src1, srс2, sizeof(src2));
Но в таком случае (полное копирование строки) смысла в -n- версии функции вообще нет. И следует писать:
C++
1
strcat(src1, srс2);
Ринат
0 / 0 / 0
Регистрация: 29.05.2014
Сообщений: 77
01.06.2014, 01:16  [ТС]     Strncat #4
Цитата Сообщение от Tulosba Посмотреть сообщение
1
strcat(src1, srс2);
В том то и дело что ругается на это.
В итоге сделал так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;
 
 
 
int main ()
{
string str1="book";
string str2="boot";
string str3=str1+str2;
 
cout<<str3<<endl;
return(0);
}
Правельный ли это будет подход к задаче? если так подумать две строки складываются и получается одна из двух.

Однако если пользоваться командой strcat то получается так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <stdio.h>  // Для printf
#include <string.h> // Для strncat
int main (void)
{
   // Массивы в которые добавляется строка
   char src1[]="book";
   char src2[]="boot";
   // Добавление строки  в строку src1
   strncat(src1, scr2);
   // Вывод результата
   printf (scr1);
   return (0);
}
и Всеравно ругается на строку strncat(src1, scr2);
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
01.06.2014, 06:00     Strncat #5
Ринат, у strncat - 3 аргумента, у strcat - 2.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
01.06.2014, 11:40     Strncat #6
Tulosba, указывая длину источника не защитит приемник от переполнения.
sizeof(src1) - strlen(src1)
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
01.06.2014, 12:08     Strncat #7
Jupiter, так strncat и не предназначена для защиты от переполнения приемника. Она для копирования ограниченного кол-ва символов источника. Остальное это уже логика более высокого уровня. В частности sizeof может быть вовсе не уместен при размещении строк в куче.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
01.06.2014, 12:30     Strncat #8
Цитата Сообщение от Tulosba Посмотреть сообщение
так strncat и не предназначена для защиты от переполнения приемника.
нет, именно для этого и предназначена, так как там указывается максимальное количество символов которое можно скопировать, а не точное количество символов которые нужно скопировать

Цитата Сообщение от Tulosba Посмотреть сообщение
В частности sizeof может быть вовсе не уместен при размещении строк в куче.
вот спасибо-то, я и не знал....

Не по теме:

может хватит уже капитанствовать в каждой теме?

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.06.2014, 13:26     Strncat
Еще ссылки по теме:

C (СИ) strncat
C++ Функция strncat
Компилятор ругается на функцию strncat C++

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
01.06.2014, 13:26     Strncat #9
Jupiter, лучше бы признал ошибку для начала во втором сообщении.
Тему тут разные люди читают. То, что очевидно нам, может быть не очевидно для других. Для ТС в частности.
Yandex
Объявления
01.06.2014, 13:26     Strncat
Ответ Создать тему
Опции темы

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