powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / проблема с отображением текста в CStatic
18 сообщений из 18, страница 1 из 1
проблема с отображением текста в CStatic
    #33725100
AxNe0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет! Имеется проблема :)
Функция
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
char * o_file(char *filename)
{
char *result="";
FILE *f;
f = fopen(filename, "r");
if (f!=  0  )
{
char ch;
fseek(f,  0 , SEEK_SET);
while (!feof(f) && ch != '\n' &&  ch != '\r')
{
ch = fgetc(f);
if ( ch != '\n' &&  ch != '\r' && !feof(f)) result+=ch;
};
return(result);
}
else 
{
AfxMessageBox("Error: File not found",MB_OK | MB_ICONSTOP, 0 );
return("Error: File not found");
};
fclose(f);
};
Вызывается при создании CStatic:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
CMainWnd::CMainWnd()
{
CRect rcwin( 20 , 10 , 420 , 60 ), rcstat( 30 , 10 , 110 , 70 );
Create(NULL, "Test program" , WS_CAPTION  | WS_SYSMENU  | SBS_SIZEBOX,rcwin, NULL,NULL);
MyStatic = new CStatic();
if (MyStatic!=NULL) MyStatic-> Create(o_file(filename),WS_CHILD|WS_VISIBLE|SS_CEN
TER, rcstat,this);
};
Но не работает так, как хотелось бы. Вместо латинских букв на CStatic появляется что-то вроде:
Этой картинки :(
Как можно поправить ситуацию?
ЗЫ Большая просьба - ответы пояснять кодом, а код - по мере возможности, подробными пояснениями...
...
Рейтинг: 0 / 0
проблема с отображением текста в CStatic
    #33725779
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
char *result="";
...
result+=ch;


- Это просто классно !! Даже работать будет !!! Вот только что же получится ...
...
Рейтинг: 0 / 0
проблема с отображением текста в CStatic
    #33725816
AxNe0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемый, MasterZiv!
Очень обидно, что в таком замечательном городе, каковым является СПб, живут такие люди как вы, которые вместо того, чтобы помочь попавшему в затруднение человеку, оставляют подобные сообщения, никак не проясняющие решение проблемы. Иными словами, если не можете ничем помочь, то молчите себе спокойно в тряпочку и не показывайте всем уровень вашего интеллекта и уважения к людям, начавшим изучение Си.
...
Рейтинг: 0 / 0
проблема с отображением текста в CStatic
    #33726126
А. К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
//1
//char *result="";
static char *result="";

//2

//result+=ch
strcat( result, ch);


Попробуй.
...
Рейтинг: 0 / 0
проблема с отображением текста в CStatic
    #33726138
Homosum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxNe0Всем привет! Имеется проблема :)
Функция
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
char * o_file(char *filename)
{
char *result="";
FILE *f;
f = fopen(filename, "r");
if (f!=  0  )
{
char ch;
fseek(f,  0 , SEEK_SET);
while (!feof(f) && ch != '\n' &&  ch != '\r')
{
ch = fgetc(f);
if ( ch != '\n' &&  ch != '\r' && !feof(f)) result+=ch;
};
return(result);
}
else 
{
AfxMessageBox("Error: File not found",MB_OK | MB_ICONSTOP, 0 );
return("Error: File not found");
};
fclose(f);
};
Вызывается при создании CStatic:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
CMainWnd::CMainWnd()
{
CRect rcwin( 20 , 10 , 420 , 60 ), rcstat( 30 , 10 , 110 , 70 );
Create(NULL, "Test program" , WS_CAPTION  | WS_SYSMENU  | SBS_SIZEBOX,rcwin, NULL,NULL);
MyStatic = new CStatic();
if (MyStatic!=NULL) MyStatic-> Create(o_file(filename),WS_CHILD|WS_VISIBLE|SS_CEN
TER, rcstat,this);
};
Но не работает так, как хотелось бы. Вместо латинских букв на CStatic появляется что-то вроде:
Этой картинки :(
Как можно поправить ситуацию?
ЗЫ Большая просьба - ответы пояснять кодом, а код - по мере возможности, подробными пояснениями...


Маленький нюанс с функцией o_file. Если я не ошибась, при открытия файла и считывания символов, вы возвращаете результати выходите из функции, но при этом забываете закрыть файл, а это не есть хорошо.
...
Рейтинг: 0 / 0
проблема с отображением текста в CStatic
    #33726738
AxNe0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо! :) Решение найдено в следующем виде:
Код: plaintext
1.
2.
3.
4.
//char *result="";
char result=new char[];

//result+=ch
result[i]=ch;

HomosumМаленький нюанс с функцией o_file. Если я не ошибась, при открытия файла и считывания символов, вы возвращаете результат и выходите из функции, но при этом забываете закрыть файл, а это не есть хорошо.
Насколько я понимаю работу функций - они выполняются пока не закончится код либо пока не попадется прерывания. Прерываний в функции нет, поэтому, весь код выполняется, потом закрывается файл и выход из функции. Или может return играет роль прерывателя?
...
Рейтинг: 0 / 0
проблема с отображением текста в CStatic
    #33727110
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxNe0Очень обидно, что в таком ...

Я не могу по ИНету учить людей языку С++ (увы), он очень большой, сложный и объемный. Человек (ой, это же ты, да ?) не понимает элементарного, если он САМ это не выучит -- не будет понимать никогда. Когда дейтвительно по делу вопросы - всегда помогаю. К тому же я тоже человек, а человеку свойственно выражать свои эмоции, такие как радость, удивление, и прочее. Я например был реально удивлен, что ТАК можно написать и что это даже будет компилироваться.

Кстати, данный форум я рассматриваю не более как треп на тему возле с++ winapi и , как не странно, дельфы.
...
Рейтинг: 0 / 0
проблема с отображением текста в CStatic
    #33727120
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxNe0Всем спасибо! :) Решение найдено в следующем виде:
Код: plaintext
1.
2.
3.
4.
//char *result="";
char result=new char[];

//result+=ch
result[i]=ch;



Какое же это решение , если это даже компилироваться не будет. Надо же
указывать размер массива.
...
Рейтинг: 0 / 0
проблема с отображением текста в CStatic
    #33727305
Homosum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxNe0Всем спасибо! :) Решение найдено в следующем виде:
Код: plaintext
1.
2.
3.
4.
//char *result="";
char result=new char[];

//result+=ch
result[i]=ch;

HomosumМаленький нюанс с функцией o_file. Если я не ошибась, при открытия файла и считывания символов, вы возвращаете результат и выходите из функции, но при этом забываете закрыть файл, а это не есть хорошо.
Насколько я понимаю работу функций - они выполняются пока не закончится код либо пока не попадется прерывания. Прерываний в функции нет, поэтому, весь код выполняется, потом закрывается файл и выход из функции. Или может return играет роль прерывателя?

return не совсем прерыватель (хотя код именно прерывает:)), это точка выхода из функции, соответственно весь код, который идет после return выполняться не будет.
...
Рейтинг: 0 / 0
проблема с отображением текста в CStatic
    #33727393
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
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.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
#include <stdio.h>
#include <string>
#include <fstream>
 
const char * o_file(const char *filename);
const std::string e_file(const char *filename);
const std::string yes_file(const char *filename);

int main() 
{
  const char *p = o_file("c:\\tmp\\q.txt");
  printf( "Value is [%s]\n", p );

  const std::string res = e_file("c:\\tmp\\q.txt");
  printf( "Value is [%s]\n", &res[ 0 ] );

  const std::string res1 = yes_file("c:\\tmp\\q.txt");
  printf( "Value is [%s]\n", &res1[ 0 ] );

  return  0 ;
}

const char * o_file(const char *filename)
{
  char *result = "";
  FILE *f = fopen(filename, "r");
  if( f != NULL )
  {
    char ch;
    fseek(f,  0 , SEEK_SET);
    while( !feof(f) && ch != '\n' &&  ch != '\r' )
    {
      ch = fgetc(f);
      if ( ch != '\n' &&  ch != '\r' && !feof(f)) result+=ch;
    };
    fclose(f);
    return(result);
  }
  else 
    return NULL;
}

const std::string e_file(const char *filename)
{
  FILE *f = fopen(filename, "r");
  if( f != NULL )
  {
    std::string result;
    //fseek(f, 0, SEEK_SET); // ýòî íå íóæíî, ïîñêîëüêó ôàéë òîëüêî ÷òî îòêðûò
    while( !feof(f) )
    {
      int ch = fgetc(f);
      if( ch == '\n' ||  ch == '\r' )
        break;
      result += ch;
    };
    fclose(f);
    return result;
  }
  else 
    return std::string();
}
    
const std::string yes_file(const char *filename)
{
  std::ifstream f( filename );
  if( !f )
    return std::string();
  else 
  {
    std::string res;
    std::getline(f,res);
    return res;
  }
}

...
Рейтинг: 0 / 0
проблема с отображением текста в CStatic
    #33727451
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чел, а ну быстро сел читать про управление памятью и области видимости переменных.
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm
...
Рейтинг: 0 / 0
проблема с отображением текста в CStatic
    #33727484
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
printf( "Value is [%s]\n", p ); <-- вот тут можно access violation схлопотать
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm
...
Рейтинг: 0 / 0
проблема с отображением текста в CStatic
    #33728696
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmoprintf( "Value is [%s]\n", p ); <-- вот тут можно access violation схлопотать


Так это неправильный вариант. Конечно можно.
...
Рейтинг: 0 / 0
проблема с отображением текста в CStatic
    #33736563
AxNe0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не знаю, на самом деле, код функции с этими исправлениями
Код: plaintext
1.
char result=new char[];
result[i]=ch;
компилируется, и даже работает, только почему-то не всегда. К сожалению, не могу понять, почему?.. :(
...
Рейтинг: 0 / 0
проблема с отображением текста в CStatic
    #33736589
Dmitrii K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxNe0Не знаю, на самом деле, код функции с этими исправлениями
Код: plaintext
1.
char result=new char[];
result[i]=ch;
компилируется, и даже работает, только почему-то не всегда. К сожалению, не могу понять, почему?.. :(
При выделении памяти при помощи оператора new необходимо указать размер выделяемого блока памяти. А чтобы работало всё корректно, не следует выходить за рамки установленного размера массива, иначе по AV вылетит...
...
Рейтинг: 0 / 0
проблема с отображением текста в CStatic
    #33736932
AxNe0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а динамический массив никак не создать, если неизвестна длина строки?
...
Рейтинг: 0 / 0
проблема с отображением текста в CStatic
    #33736970
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аятебе что написал ? Нидинамичиски что ли ?
...
Рейтинг: 0 / 0
проблема с отображением текста в CStatic
    #33737183
AxNe0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv , а вот не работают твои функции :(
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / проблема с отображением текста в CStatic
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]