Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.75
Yar
0 / 0 / 0
Регистрация: 18.01.2009
Сообщений: 6
#1

Глюк при вызове strcat. - C++

17.10.2009, 06:13. Просмотров 3064. Ответов 9
Метки нет (Все метки)

Здравствуйте.
Програмка должна объединять две строки в одну и сохранять в файле.
при запуске проги выскакивает отладчик, но я увы не силён в асемблере.
закоментированием строк пришёл к тому, что что-то не так делаю с strcat.
смотрел в книге (начальный курс с и с++) и в webe (народ обсуждает тонкости
работы, до которых как видно из кода я ещё не добрался).
что я делаю не так?

код и результат компиляции ниже.

код программы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include "stdafx.h"
#include <stdio.h>
#include <string>
 
int _tmain(int argc, _TCHAR* argv[])
{
char* ch1 = new char[100];
char* ch2 = new char[100];
 
FILE *FileOut=fopen("Out.txt","w");
 
ch1 = "qwe\0";
ch2 = "rty\0";
 
strcat (ch1,"\n");
 
fputs(ch1,FileOut);
fputs(ch2,FileOut);
 
fclose(FileOut);
 
     return 0;
}
результат компиляции:
1>------ Rebuild All started: Project: RWF, Configuration: Debug Win32 ------
1>Deleting intermediate and output files for project 'RWF', configuration 'Debug|Win32'
1>Compiling...
1>stdafx.cpp
1>Compiling...
1>RWF.cpp
1>d:\_v_\_current_\_progs_\readwritefile\rwf\rwf\rwf.cpp(10) : warning C4996: 'fopen' was declared deprecated
1> c:\program files\microsoft visual studio 8\vc\include\stdio.h(234) : see declaration of 'fopen'
1> Message: 'This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.'
1>d:\_v_\_current_\_progs_\readwritefile\rwf\rwf\rwf.cpp(15) : warning C4996: 'strcat' was declared deprecated
1> c:\program files\microsoft visual studio 8\vc\include\string.h(78) : see declaration of 'strcat'
1> Message: 'This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.'
1>Compiling manifest to resources...
1>Linking...
1>LINK : D:\_V_\_CURRENT_\_PROGS_\ReadWriteFile\RWF\Debug\RWF.exe not found or not built by the last incremental link; performing full link
1>Embedding manifest...
1>Build log was saved at "file://d:\_V_\_CURRENT_\_PROGS_\ReadWriteFile\RWF\RWF\Debug\BuildLog.htm"
1>RWF - 0 error(s), 2 warning(s)
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========


пробовал перевести СОКРАТОМ предупреждения. ?!?!?!?... получилоь не очень или верней ОЧЕНЬ НЕ...
Заранее спасибо всем кто откликнется.....
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.10.2009, 06:13
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Глюк при вызове strcat. (C++):

странности при вызове конструкторов копирования с++ - C++
Здравствуйте! Хочу задать вопрос по c++ (visual с++ 2010 express). Имеется вот такой код: class Parent { public: Parent() {} ...

При вызове функции из OpenSSL программа завершается с кодом 0х1 - C++
int main(int argc, char* argv) { RSA *keypair = RSA_generate_key(RSA_KEY_LENGTH, PUB_EXP, NULL, NULL); FILE *rsa_pubkey_file =...

Ошибка при вызове CreateThread - C++ Builder
Всем привет! Есть функция: DWORD __stdcall TmainForm::OpenPic(LPVOID lpParameter) В кнопке пытаюсь запустить её в потоке: ...

Лишний параметр при вызове функции - C++ Builder
Помогите пожалуйста. Пишу чат. При написании клиентского приложения возникла вот такая ошибка: Chat_Client.cpp(101): E2227 Extra...

Утечка памяти при вызове функции - C++ Builder
Здравствуйте. Объясните пожалуйста почему возникает утечка памяти при вызове функции get_msg_error. int get_msg_error( const...

Ошибка при вызове функции из dll - C++ Builder
Здравствуйте уважаемые программисты! Создал функцию, по обычному все отлично работает, а когда заношу ее в dll, выдает ошибку! Код dll:...

9
TanT
эволюционирую потихоньку
467 / 465 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
17.10.2009, 09:17 #2
так попробуй, только у меню вижуал, попроавь под свои нужды
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//#include "stdafx.h"
#include <stdio.h>
#include <string>
 
int main()
{
    char ch1[100]= "qwe" ;
    char ch2[100]= "rty";
 
    FILE *FileOut=fopen("Out.txt","w");
 
 
    strcat(ch1,"\n");
 
    fputs(ch1,FileOut);
    fputs(ch2,FileOut);
 
    fclose(FileOut);
    return 0;
}
1
Nick Alte
Эксперт С++
1646 / 1018 / 120
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
17.10.2009, 11:56 #3
Ты в принципе всё так делаешь, и программа строится успешно. Тебе просто выдают предупреждение об использовании функций, небезопасных в смысле переполнения буфера. Просто не обращай внимания на эти предупреждения или в самом начале файла напиши строчку
C++
1
#define _CRT_SECURE_NO_DEPRECATE
чтобы их заглушить.
1
Rififi
2362 / 1055 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
17.10.2009, 12:01 #4
Yar,
в строчках 11-12 у тебя происходит потеря (утечка) ранее выделенной памяти, в 15 - запись строки в область константных данных
1
NightmareCode
14 / 7 / 1
Регистрация: 20.09.2009
Сообщений: 89
17.10.2009, 18:01 #5
Используй улучшенную версию, вместо strcat используй strcat_s
C++
1
strcat_s(ch1, 5, "\n");
1
Yar
0 / 0 / 0
Регистрация: 18.01.2009
Сообщений: 6
17.10.2009, 23:16  [ТС] #6
если просто закоментировать //#include "stdafx.h", то не компилится.
выдаёт: fatal error C1010: unexpected end of file while looking for precompiled header. Did you forget to add '#include "stdafx.h"' to your source? - это, что, я не могу использовать strcat в Win32 Console Application?
сделал EmptyProject и вставил туда код проги ---> скомпилилось, но Out.txt пустой.
исправил вызов strcat(ch1,ch2) - Out.txt всё равно пустой.
Вместо strcat(ch1,ch2) попробовал strcat_s(ch1,5,ch2) - Out.txt всё равно пустой.
0
NightmareCode
14 / 7 / 1
Регистрация: 20.09.2009
Сообщений: 89
18.10.2009, 01:46 #7
Цитата Сообщение от Yar Посмотреть сообщение
если просто закоментировать //#include "stdafx.h", то не компилится.
выдаёт: fatal error C1010: unexpected end of file while looking for precompiled header. Did you forget to add '#include "stdafx.h"' to your source? - это, что, я не могу использовать strcat в Win32 Console Application?
сделал EmptyProject и вставил туда код проги ---> скомпилилось, но Out.txt пустой.
исправил вызов strcat(ch1,ch2) - Out.txt всё равно пустой.
Вместо strcat(ch1,ch2) попробовал strcat_s(ch1,5,ch2) - Out.txt всё равно пустой.
Надо в настройках проекта Compile->Use PreCompiledHeader изменить к не использованию и затем закоментировать строку #include "stdafx.h"
1
Yar
0 / 0 / 0
Регистрация: 18.01.2009
Сообщений: 6
19.10.2009, 01:21  [ТС] #8
NightmareCode - спасибо за подсказку. Выключил PreCompiledHeader. Компиляция прошла успешно.
но, УВЫ, всё равно вываливаетя в отладчик. Сегодня уже хотел было плюнуть на эту функцию, но
ведь как тоже она работает. Очень интригует, чтоже я не так делаю????

пытался ещё просмотреть др. настройки проекта. может там где-то собачка порылась?
единственное, что вызвало ещё подозрение Character Set,
но это если я правильно понял, влияет лиш на правильность ввода/вывода символов (используемый тип кодировки).

Добавлено через 48 минут
Решил попробовать: а как на счёт других функций из string.h
Вместо strcat попробовал использовать strcpy (ch1,"111");
!!!! компиляция - успешно, при запуске - вываливается в отладчик !!!!
что бы это могло быть???
0
Yar
0 / 0 / 0
Регистрация: 18.01.2009
Сообщений: 6
20.10.2009, 01:14  [ТС] #9
Получилось... но не так как ожидал и не так как описано в хелпе:
1) при создании проекта если выбрать Create directory for solution, то strcat и strcpy на отрез отказывались работать (по крайней мере у меня).
2) некоторая странность с типами операндов.
char dst[20] = "qwe"; //в хелпе сказано, что должно быть оъявление char *dst
char* src= new char[20];//в хелпе - const char *src
src= "rty";
strcat(dst,src);

Почему если dst объявить как char* dst= new char[20];,
и присвоить какое-нибудь значение, то вываливается в отладчик, хотя при компиляции ошибок не выдаёт?
0
NightmareCode
14 / 7 / 1
Регистрация: 20.09.2009
Сообщений: 89
28.10.2009, 13:01 #10
Цитата Сообщение от Yar Посмотреть сообщение
Получилось... но не так как ожидал и не так как описано в хелпе:
1) при создании проекта если выбрать Create directory for solution, то strcat и strcpy на отрез отказывались работать (по крайней мере у меня).
2) некоторая странность с типами операндов.
char dst[20] = "qwe"; //в хелпе сказано, что должно быть оъявление char *dst
char* src= new char[20];//в хелпе - const char *src
src= "rty";
strcat(dst,src);

Почему если dst объявить как char* dst= new char[20];,
и присвоить какое-нибудь значение, то вываливается в отладчик, хотя при компиляции ошибок не выдаёт?
При динамической выделении памяти оператором new или new[] необходимо также после использования данного объекта или массива объектов под которые выделена динамическая память удалять операторами delete(для одиночного объекта) или delete[](для массива).
В твоем случае:
C++
1
2
3
4
char *src=new char[20];
//код где используется данный указатель src
//После использования указателя на массив символов
delete [] src;
1
28.10.2009, 13:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.10.2009, 13:01
Привет! Вот еще темы с ответами:

Не заполняется структура, при вызове функции из dll. - C++ Builder
Здравствуйте. Возникла такая ситуация. Хочу подцепить dllку в проект borland c++ builder 6, которая работает в проекте visual c++ 6. ...

Ошибка при вызове функции из другого модуля - C++ Builder
Ситуация до боли забитая, но не могу найти ошибку... Мне нужно из формы FFlat вызвать функцию определенную в дрогой форме FVipHomeDay....

Программа завершается аварийно при вызове функции - C++ Builder
Делаю консольное приложение на шестом Билдере. Не могу найти ошибку.Убил день. Прога компилиться без ошибок , но когда вызываю функцию:...

Глюк: перезапуск проводника при вызове контекстного меню exe файлов. - Windows 7
При нажатии правой кнопкой мыши на любом из exe файлов закрываются все окна проводника, передергивает панель пуск и обновляется рабочий...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru