powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вопрос по стандартной библе
2 сообщений из 2, страница 1 из 1
Вопрос по стандартной библе
    #32237420
Debug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые, суть вопроса в следующем
Ниже представлен маленький кусочек
кода примерно соотв. ситуации, которую я
хочу прояснить для себя.


if ((F = fopen(SettingsFile,"rt"))==NULL )
{
.......
.......
}
.............
.............
char *result_str = "" ;
char st[32];

do
{
fgets(st,32,F);
strcat(result_str,st);

if (feof(F))
break;
}
while (true);
char* temp = "111";
fclose(F);

Кто работает со стандартной библиотекой, для того не нужно
объяснять, что в коде открываеться файл для чтения,
затем считывается в переменную st по 32 байта в цикле,
затем конкатенация со строкой result_str.
Так вот весь фокус в том, что переменная temp
которая ниже инициализируется "111" принимает значение
не 111 а значение result_str!!!
В общем компилятор Builder - а 6 - го считает своим долгом
инициализировать значением result_str любую константную строку
следующую после цикла с применением strcat.
Неважно, куда идёт эта строка, в поток или в файл или просто инициализирует
переменную. Вот такие вот дела. Объясните мне недалёкому, в чём тут дело.
Я конечно знаю, что можно использовать вместо char* AnsiString или просто
string. Но просто хочеться разобраться в этом, в отладчике проверял - это из-за strcat.
...
Рейтинг: 0 / 0
Вопрос по стандартной библе
    #32237449
Фотография ytenok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Молодой человек!!! А память выделять Пушкин будет???

Ты работаеш с указателем как с массивом. Подсунь фаил побольше и прога должна вылететь.

правильн ее :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
if (!(F = fopen(SettingsFile,  "rt" )))  {
....... 
} 
............. 
............. 
char result_str[ 1024 ]; ::memset(result_str,  0 , sizeof(result_str));
char st[ 32 ]; 

while (!feof(F) && strlen(result_str) < sizeof(result_str)) { 
    fgets(st, sizeof(st), F); 
    strcat(result_str, st); 
}

char* temp =  "111 "; 
fclose(F); 


PS: память лучше выделять с new или malloc.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вопрос по стандартной библе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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