strcpy_s, strcat, strlen вызывают Access violation
strcpy_s, strcat, strlen вызывают Access violation. Вот код:
Код:
LPSTR readedtext="";
strcpy_s(readedtext,strlen(readedtext)+strlen(pszOutput),pszOutput);
pszOutput мы получаем из результатов работы функции.
В чем проблема?
|
Цитата:
Цитата crashtuak
pszOutput мы получаем из результатов работы функции. »
|
А сам этот код где расположен?
Может функция пытается получить результат, который она еще не сформировала?
|
Нет, результат уже есть, в дебагере смотрел, все строки в наличии.
Для ясности предоставлю код программы:
Код:
#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;
}
|
Drongo, твой код работает, у меня все проблемы из-за LPSTR наверно были, но мне и char пойдет. Но как оказалось, проблема у меня более глобального характера, и без полного кода никак. Вскоре я его выложу.
|
использую описание функции по ссылке:
http://msdn.microsoft.com/en-us/libr...8VS.80%29.aspx
Цитата:
Цитата crashtuak
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;
|
Цитата:
Цитата pva
Случись такое в моей голове, я бы тоже выдал access violation. И возможно красивые мультики увидел бы... »
|
:laugh:
Понял, где ошибки, буду править.
pva, пока вы не указали на строку, я и не подумал, какой бред написал, у меня в самого в голове access violation из-за своей тупости полчился:)
|
Время: 02:56.
© OSzone.net 2001-