С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Ринат
0 / 0 / 0
Регистрация: 29.05.2014
Сообщений: 81
#1

Strncat - C++

31.05.2014, 21:54. Просмотров 255. Ответов 8
Метки нет (Все метки)

Пытаюсь с помощью этой функции соединить две строки, ничего не получается помогите плз я уже просто не понимаю:
Вот код там все элементарно но ругается на саму команду 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);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.05.2014, 21:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Strncat (C++):

Функция strncat - C++
Написать вариант функции strncat(s,t,n), которая копирует не более n букв стринга t в конец стринга s и программу для проверки...

реализовать strncat(s1,s2,n) - C++
Здраствуйте. Нужна ваша помощь! Нужна прога, берущая из файла2 n первых символов и приписывающая их в концевик файла1. Реализовать...

аналог функции STRNCAT(). - C++
Написать и протестировать аналог функции STRNCAT(). #include &lt;stdio.h&gt; #include &lt;conio.h&gt;

аналог функции STRNCAT(). - C++
Написать и протестировать аналог функции STRNCAT(),просто на Си. #include&lt;stdio.h&gt; #include&lt;string.h&gt;

аналог функции STRNCAT() - C++
Написать и протестировать аналог функции STRNCAT().

Компилятор ругается на функцию strncat - C++
#include &lt;iostream&gt; #include &lt;string&gt; using namespace std; long p,x,i,j,k,d,l; char t,s; void prefix() {

8
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
31.05.2014, 22:23 #2
C++
1
2
3
4
char src1[100]="book";
   char src2[]="boot";
   // Добавление строки  в строку src1
   strncat(src1, scr2, sizeof(src1));
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
31.05.2014, 23:30 #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 / 0
Регистрация: 29.05.2014
Сообщений: 81
01.06.2014, 01:16  [ТС] #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);
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
01.06.2014, 06:00 #5
Ринат, у strncat - 3 аргумента, у strcat - 2.
0
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
01.06.2014, 11:40 #6
Tulosba, указывая длину источника не защитит приемник от переполнения.
sizeof(src1) - strlen(src1)
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
01.06.2014, 12:08 #7
Jupiter, так strncat и не предназначена для защиты от переполнения приемника. Она для копирования ограниченного кол-ва символов источника. Остальное это уже логика более высокого уровня. В частности sizeof может быть вовсе не уместен при размещении строк в куче.
0
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
01.06.2014, 12:30 #8
Цитата Сообщение от Tulosba Посмотреть сообщение
так strncat и не предназначена для защиты от переполнения приемника.
нет, именно для этого и предназначена, так как там указывается максимальное количество символов которое можно скопировать, а не точное количество символов которые нужно скопировать

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

Не по теме:

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

0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
01.06.2014, 13:26 #9
Jupiter, лучше бы признал ошибку для начала во втором сообщении.
Тему тут разные люди читают. То, что очевидно нам, может быть не очевидно для других. Для ТС в частности.
0
01.06.2014, 13:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.06.2014, 13:26
Привет! Вот еще темы с ответами:

Применение strncat в VS 2008 выдает ошибку.. - C++
#include &lt;iostream&gt; #include &lt;string&gt; int main() { char *text = &quot;Oshybka odnogo - urok drugomu&quot;, *from = &quot;urok&quot;, *to =...

Напишите варианты библиотечных функций strncpy, strncat и strncmp - C++
вот такая задача, Напишите варианты библиотечных функций strncpy, strncat и strncmp, которые оперируют с первыми символами своих...

Нужен аналог функции strncat - C (СИ)
Напишите свою реализацию этой функции.


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

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

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