скопируйте символ* для обугливания*

Вот часть моего кода:

extern "C" REGISTRATION_API int extreme(char* lKey)
{
string s1; 
char *p=NULL;
try
{
    ifstream myfile ("extreme.txt");
    int i=0;
    if (myfile.is_open())
    {
    while (getline(myfile,s1))
       {
        switch (i)
         {
        case 1:
         strcpy(p,s1.c_str());
         lKey=p;
        break;
             //continue here
         }
      }
   }
}

Теперь, когда я вызываю эту функцию из внешнего приложения, я получаю эту ошибку:

AccessViolationException:
Предпринятый для чтения или защищенная от записи память. Это часто - признак, что другая память повреждена.

Проблема происходит из-за этого:

lKey=p;

Как я могу присвоиться lKey кому: p?

7
задан sth 15 July 2010 в 14:27
поделиться

4 ответа

Вам необходимо предварительно выделить память, которую вы передаете на strcpy . Т.е. a p = new char [s1.length () + 1]; сделает это (+1 для завершающего символа 0). Однако не рекомендуется смешивать подпрограммы std :: string и строки C без уважительной причины. Лучше использовать std :: string , это избавит вас от множества проблем.

Также lKey = p тоже не будет работать - он просто копирует локальный адрес p в локальную переменную lKey . Звонящий даже разницы не увидит.

12
ответ дан 6 December 2019 в 06:02
поделиться

На самом деле проблема заключается в strcpy(p,s1.c_str()); поскольку p никогда не устанавливается ни на что, кроме NULL.

10
ответ дан 6 December 2019 в 06:02
поделиться

Помните, что char* - это просто адрес участка памяти. Вам нужно, чтобы по этому адресу была выделена память.

В вашем коде у вас нет памяти, выделенной для использования, и вы не установили p для указания на этот адрес памяти.

strcpy не выделяет буфер, он просто берет адрес памяти для копирования данных.

Если вы передаете буфер в функцию, то вам, вероятно, нужно просто это (и удалить p)

strcpy(lKey, s1.c_str());
8
ответ дан 6 December 2019 в 06:02
поделиться
  1. Удалите p (здесь он ничего не делает) и скопируйте данные из s1 прямо в lkey
  2. Не для того, чтобы вас обидеть, но схема отступов - пародия, пожалуйста, скопируйте откуда-нибудь хороший стиль (google 1tbs )
0
ответ дан 6 December 2019 в 06:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: