Консультация № 174304
16.11.2009, 22:51
35.00 руб.
0 3 3
Здравствуйте уважаемы эксперты!Помогите пожалуйста написать простую программу на языке C++ используя memset
Объясните пожалуйста, каждую строчку в этой программе(какие функциию выполняет каждая строчка), какие функции выполнят memset вообщем
Заранее спасибо!!!

Обсуждение

давно
Старший Модератор
17042
808
16.11.2009, 23:12
общий
это ответ
Здравствуйте, Дианов Р.З!
Прототип функции memset:

Код:

void* memset(void* ptr, int value, size_t num);


Функция memset замещает num байт в блоке памяти (буфере), на который указывает указатель ptr, на символ заполнения value, интерпретируемый как unsigned char. Классический пример работы функции memset см. в приложении. Выделяем буфер psString, содержащий строку "Almost every programmer should know memset!". Вызовом функции memset(psString, '!', 6); мы замещаем в этой строке первые 6 символов на символ заполнения "!", т.е. вместо слова Almost будут выводиться 6 восклицательных знаков.

Приложение:
#include <cstdio>
#include <string>
using namespace std;
//----------------------------------------------------------------------------------------------------------
int main()
{
char psString[] = "Almost every programmer should know memset!";
memset(psString, '!', 6);
puts(psString);
return 0;
}
Об авторе:
We have but faith: we cannot know;
For knowledge is of things we see;
And yet we trust it comes from thee,
A beam in darkness: let it grow.
-----
https://www.linkedin.com/in/andreynkuznetsov
https://www.researchgate.net/profile/Andrey_Kuznetsov11
http://www.researcherid.com/rid/K-8824-2014
Неизвестный
16.11.2009, 23:35
общий
17.11.2009, 05:17
это ответ
Здравствуйте, Дианов Р.З.

Функция memset получает указатель на массив s, и его первые n байт прописывает символом с. Синтаксис: void *memset(void *s, int c, size_t n);
Пример из стандартного Help Borland C++ 3.1:
int main(void)
Код:
{
char buffer[] = "Hello world\n"; .// Объявляется массив buffer и ему сразу присваивается значение "Hello world"
printf("Buffer before memset: %s\n", buffer);// Вывод значения массива buffer на печать
memset(buffer, '*', strlen(buffer) - 1); //Замена 11 первых символов массива buffer на символ '*'
printf("Buffer after memset: %s\n", buffer);// Вывод значения массива buffer на печать
return 0;
}

На выходе получится:
Код:
Hello world
***********

11 символов '*' вместо предыдущего содержимого массива.
Для примера привожу модификацию предыдущего кода - только первые 5 символов заменяются на символ '*':
}
На выходе получится:
Код:
Hello world
***** world


Приложение:
#include <string.h>
#include <stdio.h>
#include <mem.h>
#include <conio.h>

int main(void)
{
char buffer[] = "Hello world\n";
printf("Buffer before memset: %s\n", buffer);
memset(buffer, '*', 5);
printf("Buffer after memset: %s\n", buffer);
getch();
return 0;
}
Неизвестный
16.11.2009, 23:43
общий
это ответ
Здравствуйте, Дианов Р.З.
Прочесть общую информацию о ф-ии memset() вы можете на http://ru.wikipedia.org/wiki/Memset
void* memset(void* buf,int ch,size_t count)
Функция копирует младший байт ch в первые count символов массива buf. Функция возвращает адрес массива buf.
Пример программы. C++. Компилировал gcc.
Код:
// Подключаемые заголовки
#include <iostream> // Для потокового ввода/вывода
#include <cstring> // Для memset()

// Это наша главная(и в данном проекте единственная) функция. С нее начинается управление
int main()
{
// Буфер для наших операций
char buffer[]="Это наш буфер";
// Размер нашего буффера в байтах
size_t bufferLength=sizeof(buffer);
// Выведем его для проверки
std::cout<<"Наш буфер:""<<buffer<<"""<<std::endl;
// Используя memset() заполним буфер чем нибудь. Например '0'. И выведем его
std::cout<<"Теперь буфер:""<<(char*)std::memset(buffer,'0',bufferLength-1)<<"""<<std::endl;
return 0;
}

Вывод программы:
Код:
Наш буфер:"Это наш буфер"
Теперь буфер:"00000000000000000000000000"
Форма ответа