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

Как работает strncpy()? - C++

Восстановить пароль Регистрация
 
 
anti-k
 Аватар для anti-k
226 / 74 / 23
Регистрация: 17.07.2015
Сообщений: 774
Завершенные тесты: 1
06.10.2015, 07:38     Как работает strncpy()? #1
C++
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<iostream>
#include<cstring>
using namespace std;
char*input(char*word,int&size){
    cin.getline(word,size);
    size=strlen(word);
    char*ch=new char[size];
    strncpy(ch,word,size);
    delete[]word;
    return ch;
}
int main(){
    int n=100;
    char*ch=new char[n];
    ch=input(ch,n);
    int k=n;
    char*che=new char[k];
    che=input(che,k);
    cout<<"\n"<<ch;
    cout<<"\n"<<che<<endl;
    char*ptr=strstr(ch,che);
    cout<<*ptr;
    return 0;
}
выдает что то такое
Миниатюры
Как работает strncpy()?  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.10.2015, 07:38     Как работает strncpy()?
Посмотрите здесь:

про strncpy () C++
strncpy C++
C++ Странности в поведении strncpy
C++ Задание по копированию строк, strncpy
C++ Ошибка в функции (strncpy)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
daslex
1084 / 494 / 101
Регистрация: 02.08.2011
Сообщений: 2,408
06.10.2015, 10:19     Как работает strncpy()? #21
C++
1
2
int k=n;
    char*che=new char[k+1];
В самом начале. в main

Добавлено через 44 минуты
C++
1
 if (ptr) cout<<*ptr<<" "<<k<<endl;  //еще
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Black Fregat
06.10.2015, 15:22
  #22

Не по теме:

Toshkarik, я был неправ. Что-то переклинило

Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
06.10.2015, 23:42     Как работает strncpy()? #23
Сообщение было отмечено автором темы, экспертом или модератором как ответ
anti-k, извиняюсь, не увидел Ваши последние вопросы.
Цитата Сообщение от anti-k Посмотреть сообщение
почему не size+1???
Смотрите. В Вашем примере размер строки == 19. Ее можно рассматривать как массив с индексами от 0 до 18. При записи в ch+size, получается, что Вы пишите в ячейку с индексом 19, которой нет у строки. При выделении памяти size + 1 она появляется. Если бы Вы хотели записать в ch+size+1, то это была бы ячейка с индексом 20, которой, опять же, нет у стройки. Смысл в выделении size+1 памяти в том, что бы хватило на последний терминальный символ.
Цитата Сообщение от anti-k Посмотреть сообщение
Toshkarik, в случае если я ввожу больше 10, меня выбрасывает из программы((
Берутся первые 9 символов из потока и 1 терминальный символ конца строки и записываются в строку ch. Но в потоке еще остались символы, Вы ведь ввели больше 9 символов. Значит, что для второй строки ( che ) уже есть данные, и они туда записываются. Далее, идет вызов функции strstr. Я почти уверен, что она возвращает 0.
anti-k
 Аватар для anti-k
226 / 74 / 23
Регистрация: 17.07.2015
Сообщений: 774
Завершенные тесты: 1
11.10.2015, 06:41  [ТС]     Как работает strncpy()? #24
Toshkarik, Спасибо!!!
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16824 / 5245 / 320
Регистрация: 30.03.2009
Сообщений: 14,125
Записей в блоге: 26
11.10.2015, 13:07     Как работает strncpy()? #25
По поводу strncpy и рядом лежащих функций рекомендую почитать тут: Распространенные ошибки
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.10.2015, 14:36     Как работает strncpy()?
Еще ссылки по теме:

ошибка 4996 strncpy C++
Как заставить Strncpy вложить в itog часть символов строки str, если дина str больше, чем кол-во нужных нам символов? C++
Поведение функции strncpy C++

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

Или воспользуйтесь поиском по форуму:
anti-k
 Аватар для anti-k
226 / 74 / 23
Регистрация: 17.07.2015
Сообщений: 774
Завершенные тесты: 1
11.10.2015, 14:36  [ТС]     Как работает strncpy()? #26
Evg, Огромное спасибо!!!

Добавлено через 8 минут
Evg, Не могли бы вы посмотреть этот пост Работа atoi и itoa ??
Yandex
Объявления
11.10.2015, 14:36     Как работает strncpy()?
Ответ Создать тему
Опции темы

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