Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] strncpy 
:(
    Опции темы
DAEN
Дата 22.1.2007, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 27.11.2006

Репутация: нет
Всего: нет



strncpy помогите реализовать функцию, тоесть написать аналог этой функции 
кто знает напишите- надо завтра...

Это сообщение отредактировал(а) DAEN - 22.1.2007, 19:48
PM MAIL   Вверх
Oleg_Ci
Дата 22.1.2007, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: 25
Всего: 30



 smile 
Код

#include <iostream>
using namespace std;

char * _strncpy( char *dst, const char *src, size_t size ){
    for( ; size; size-- )
        *dst++ = *src++;
    return dst;
}
//////////////////// MAIN //////////////////////////
int main(){
    char sourse[] = "Hello World !";
    char res[sizeof(sourse)];
    _strncpy( res, sourse, sizeof(sourse));
    cout << sourse << "\n" << res << "\n";

    getchar();
    return 0;
}

PM MAIL   Вверх
Romikgy
Дата 23.1.2007, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 9
Всего: 146



имхо еще одно условие было бы корректно вставить , окончание копирования, если строка источник закончится быстрее (нулем ) чем заявлено в размере копирования


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Oleg_Ci
Дата 23.1.2007, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: 25
Всего: 30



Romikgy, точно подменил smile 
Код

... for( ; size && *dst; size-- ) ...

PM MAIL   Вверх
SergeCpp
Дата 23.1.2007, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


 
**


Профиль
Группа: Участник
Сообщений: 955
Регистрация: 8.8.2005
Где: At Home

Репутация: 1
Всего: 124



И ещё, если уж аналог-то:

Цитата(MSDN)
If count is greater than the length of source,
the destination string is padded with null characters up to length count.



Это сообщение отредактировал(а) SergeCpp - 23.1.2007, 14:18
PM MAIL WWW ICQ   Вверх
V.A.KeRneL
  Дата 23.1.2007, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vadim A. Kazantsev
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 3.12.2006
Где: Moscow, Russia

Репутация: 7
Всего: 14



Код

/*
 * Copy s2 to s1, truncating or null-padding to always copy n bytes
 * return s1
 */
char *
strncpy(char *s1, const char *s2, size_t n)
{
    char *os1 = s1;

    n++;
    while ((--n != 0) && ((*s1++ = *s2++) != '\0'))
        ;
    if (n != 0)
        while (--n != 0)
            *s1++ = '\0';
    return (os1);
}


http://src.opensolaris.org/source/xref/lof...t/gen/strncpy.c


Это сообщение отредактировал(а) V.A.KeRneL - 23.1.2007, 14:43


--------------------
«C'est un pense-creux d'ici. C'est le meilleur et le plus irascible homme du monde...» © Ф.М. Достоевский, «Бесы»
---/)/)---(\.../)---(\(\
--(':'=)---(=';'=)---(=':')
(")(")..)-(").--.(")-(..(")(")

PM MAIL IM ICQ AOL YIM MSN   Вверх
Oleg_Ci
Дата 23.1.2007, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: 25
Всего: 30



Я про завершающий нуль забыл.
V.A.KeRneL, правильный пример привёл.
Вобщем так надо-было(непроверял) smile 
Код

char * _strncpy( char *dst, const char *src, size_t size ){
    for( ; size && *dst; size-- )
        *dst++ = *src++;
    if(*( dst-1 )) *(dst-1) = '\0';
    return dst;
}


Это сообщение отредактировал(а) Oleg_Ci - 23.1.2007, 15:45
PM MAIL   Вверх
Solomon
Дата 23.1.2007, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 23.1.2006
Где: Украина Киев

Репутация: 2
Всего: 2



Гммм... 

char * _strncpy( char *dst, const char *src, size_t size ){    
    for( ; size && *dst; size-- )    
        *dst++ = *src++;    
    if(*( dst-1 )) *(dst-1) = '\0';    
    return dst;    
}

а зачем здесь функция которая что то возвращает?  smile 


--------------------
Если не идти до конца к поставленным целям и не пытатся их достигнуть, каким бы тяжелым не казался путь, то лучше и не ставь их перед собой, но тот кто не ставит перед собой труднодоступные цели, никогда не ощутит эйфорию настоящей победы... победы над миром...
Соломон 2008
PM MAIL ICQ GTalk YIM   Вверх
PoloS
Дата 23.1.2007, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 29.12.2006
Где: МО, г. Одинцово

Репутация: 4
Всего: 5



Цитата(Solomon @ 23.1.2007,  18:02)
Гммм... 


а зачем здесь функция которая что то возвращает?  smile

Так в стандартной либе =) видимо, что бы ты мог сразу "применить" рез-т:

Код


puts(_strncpy(dst, src, size );


PM MAIL ICQ   Вверх
Solomon
Дата 23.1.2007, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 23.1.2006
Где: Украина Киев

Репутация: 2
Всего: 2



тоже вариант... хотя как на меня это лишнее...  smile 


--------------------
Если не идти до конца к поставленным целям и не пытатся их достигнуть, каким бы тяжелым не казался путь, то лучше и не ставь их перед собой, но тот кто не ставит перед собой труднодоступные цели, никогда не ощутит эйфорию настоящей победы... победы над миром...
Соломон 2008
PM MAIL ICQ GTalk YIM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0518 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.