Показать полную графическую версию : strcpy_s, strcat, strlen вызывают Access violation
crashtuak
02-04-2010, 14:25
strcpy_s, strcat, strlen вызывают Access violation. Вот код:
LPSTR readedtext="";
strcpy_s(readedtext,strlen(readedtext)+strlen(pszOutput),pszOutput);
pszOutput мы получаем из результатов работы функции.
В чем проблема?
pszOutput мы получаем из результатов работы функции. »
А сам этот код где расположен?
Может функция пытается получить результат, который она еще не сформировала?
crashtuak
02-04-2010, 16:42
Нет, результат уже есть, в дебагере смотрел, все строки в наличии.
Для ясности предоставлю код программы:
#include "stdafx.h"
#include <windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
LPSTR testt="";
LPSTR testt2="qwerty";
strcpy_s(testt,strlen(testt2)+strlen(testt),testt2);
return 0;
}
Результат: Access violation.
crashtuak, заголовочный файл #include <cstring.h> почему не подключаешь? А так не прокатит?
#include <windows.h>
#include <cstring.h>
#include <iostream.h>
int main()
{
char testt[30]="";
char testt2[]="qwerty";
strcpy(testt, testt2);
std::cout<<"Test = "<<testt<<endl;
int z;
std::cin>>z;
return 0;
}
crashtuak
02-04-2010, 19:34
Drongo, твой код работает, у меня все проблемы из-за LPSTR наверно были, но мне и char пойдет. Но как оказалось, проблема у меня более глобального характера, и без полного кода никак. Вскоре я его выложу.
использую описание функции по ссылке:
http://msdn.microsoft.com/en-us/library/td1esda9%28VS.80%29.aspx
int _tmain(int argc, _TCHAR* argv[]) { LPSTR testt=""; LPSTR testt2="qwerty"; strcpy_s(testt,strlen(testt2)+strlen(testt),testt2); return 0; } »
код
strcpy_s(testt,strlen(testt2)+strlen(testt),testt2);
должен запихать в testt, под который выделен (формально) один символ, и приравнен нулю
strlen(testt2)+strlen(testt) символов из строки testt2. Случись такое в моей голове, я бы тоже выдал access violation.
И возможно красивые мультики увидел бы...
если хочешь соединить две строки, то нужно:
1. выделить буфер необходимого размера
2. следить за переполнением буфера
unsigned const dest_size = 100;
// я невнимательно прочитал про размер - учитывает он конечный ноль или нет. Написал как будто учитывает.
TCHAR testt[dest_size] = "preamble+"; // хотя можно и из динамической памяти LPSTR testt = new char[dest_size];
LPSTR testt2 = "qwerty";
strcpy_s(testt + strlen(testt), min(dest_size - strlen(testt1), strlen(testt2)+1 /*для завершающего 0*/), testt2);
// если выделял динамически, то delete [] testt;
crashtuak
03-04-2010, 22:05
Случись такое в моей голове, я бы тоже выдал access violation. И возможно красивые мультики увидел бы... » :laugh:
Понял, где ошибки, буду править.
pva, пока вы не указали на строку, я и не подумал, какой бред написал, у меня в самого в голове access violation из-за своей тупости полчился:)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.