Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
32 / 13 / 3
Регистрация: 10.08.2012
Сообщений: 619
Записей в блоге: 2
1

Не могу понять присваивание указателю

26.08.2012, 00:37. Показов 494. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Не могу понять одну строчку s = (char *)malloc(fLen); Понял значение указателя становится равно числу символов в файле битах и вот это (char *) не могу понять



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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include "stdafx.h"
#include <iostream>
#include <malloc.h>
#include <string.h>
#include <conio.h>
#include <stdio.h>
 using namespace std;
 
 
int pkzs(char *,char); 
 
void main()
{
        setlocale (LC_ALL, "Rus");
        char *s;
        FILE *f;
        long fLen;
        if((f=fopen("D:\\file.txt","rb+")))
        {
                fseek(f,0,SEEK_END);
                fLen = ftell(f);
                fseek(f,0,SEEK_SET);
                if(0 < fLen)
                {
                        s = (char *)malloc(fLen);
                        fscanf(f,"%s",s);
                }
                else
                        cout<<"Файл пуст!\r\n";
                fclose(f);
        }
        int n1 = 0,n2 = 0;
        if(s)//Если мы что-то прочли из файлика
        {
                n1 = pkzs(s,'(');
                n2 = pkzs(s,')');
                if(n1 == 0 && n2 == 0)
                        cout<<"Файл не содержит скобок!\r\n";
                else
                        if(n1 == n2)
                                cout<<"Баланс скобок в файле (C:\\file.txt) выполняется!\r\n";
                        else
                                cout<<"Файл (C:\\file.txt) не имеет баланса скобок!\r\n";
//#ifndef _DEBUG//Сделал потому что для Debug-a free - глючит
//              free((void *)s);
//#endif
        }
        cin>>n1; 
        system ("pause");
} 
 
int pkzs(char*s,char c)
{
        int n = 0;
        char *chBuf = strchr(s,c);
        while(chBuf)
        {
                n++;
                chBuf = strchr(chBuf + 1,c);
        }
        return n;
        system ("pause");
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.08.2012, 00:37
Ответы с готовыми решениями:

Присваивание литерала указателю
Почему можно сделать так char *f=&quot;string&quot;; а в Си еще и так int *x=&quot;string&quot;; Т.е. как это...

Присваивание указателю адреса памяти
Имеется структура и указатель на неё. В указатель выделяется память следующим образом: pointer =...

Присваивание указателю адреса области памяти в явном виде
Помогите пожалуйста) #include &quot;stdafx.h&quot; int _tmain(int argc, _TCHAR* argv) { unsigned...

Пытаюсь понять комбинаторику.Не могу понять какую формулу использовать
Добрый день. Уже второй день бьюсь над комбинаторикой. Проблема стоит в том, что не могу понять,...

4
113 / 113 / 42
Регистрация: 02.05.2012
Сообщений: 524
Записей в блоге: 1
26.08.2012, 00:41 2
s выделяется память в размере fLen байт
как я понял, могу быть не прав
1
442 / 410 / 132
Регистрация: 21.01.2012
Сообщений: 974
26.08.2012, 00:42 3
malloc возвращает void* указатель, что бы компилятор не выдавал предупреждения о неявном приведении одного указателя к другом используется явное приведение. В данном случае (char*)
1
32 / 13 / 3
Регистрация: 10.08.2012
Сообщений: 619
Записей в блоге: 2
26.08.2012, 00:45  [ТС] 4
Цитата Сообщение от Пaтрик Посмотреть сообщение
malloc возвращает void* указатель, что бы компилятор не выдавал предупреждения о неявном приведения одного указателя к другом используется явное приведение. В данном случае (char*)
Спасибо понял...

Кстати если кому интересно советую сайт http://www.codenet.ru Там неплохо обучаться)))
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
26.08.2012, 00:52 5
Так как fLen - это количество байтов, то нужно, чтобы тип указателя s этому соответствовал. Размер типа char равен одному байту, поэтому s приводится к типу char*. Если бы s указывал на память, где хранятся данные размером в double, то s нужно было бы приводить к типу double.
0
26.08.2012, 00:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.08.2012, 00:52
Помогаю со студенческими работами здесь

Как понять поставленную задачу. Не могу понять этот полиморфизм?
A software academy teaches two types of courses: local courses that are held in some of the...

Стек на основе массива структур - эт как понять читаю литературу и не могу понять!
Стек статически (на основе массива структур). Пример структура &quot;Товар&quot; которая включает в себя: №...

Не могу понять понять смысл резидентной программы
Суть препод кинул резидент, сказал чтобы сами разбирались. Увидел что ее выкладывали уже, но в...

Не могу вывести на экран строку, переданную по указателю функцией
Вот такой несложный код. Функция copyString просто копирует строку. #include &quot;stdafx.h&quot;...

Не могу сделать полиморфизм. Не могу до конца понять пример по этому поводу
Есть такая задача: Класс Animal должен быть абстрактным, имеет имя и вес. Класс Reptile имеет...

Не могу понять почему не могу считать символьный ряд через cin.getline
Не могу понять почему не могу считать символьный ряд через cin.getline.Помогите позязя. #define ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru