Проблема с указателями
От: xptr http://leadercom.ru
Дата: 25.05.06 06:55
Оценка:
Господа, день добрый, подскажите пожайлуста!!!

Вот такая ситуация:
нужно разделить уранение на левую и правую часть, разделение осуществляется знаком равенства.
Пишу следующий код:

char* equation = "2к=3и";
char* sep = strchr(equation, '=');
char* leftSide = equation;
char* rightSide = sep + 1;
sep = '\0';

после выполнения последней команды sep содержит Bad Ptr,
тогда пишу так:

char* equation = "2к=3и";
char* sep = strchr(equation, '=') — 1;
char* leftSide = equation;
char* rightSide = sep + 2;
sep[1] = '\0';

после выполнения последней команды выпадает ошибка:

Unhandled exception at 0x0041368b in win2.exe: 0xC0000005: Access violation writing location 0x0041563e.
где 0x0041563e адрес символа равно.

что не правильно делаю???
Re: Проблема с указателями
От: Аноним  
Дата: 25.05.06 07:03
Оценка:
Забыл написать звездочку
X> char* equation = "2к=3и";
X> char* sep = strchr(equation, '=');
X> char* leftSide = equation;
X> char* rightSide = sep + 1;
X> *sep = '\0';
___^
Re: Проблема с указателями
От: Вумудщзук Беларусь  
Дата: 25.05.06 07:24
Оценка: +1
>Пишу следующий код:

> char* equation = "2к=3и";

> char* sep = strchr(equation, '=') — 1;
> char* leftSide = equation;
> char* rightSide = sep + 2;
> sep[1] = '\0';

>после выполнения последней команды выпадает ошибка:

здесь ты пытаешься модифицировать const char, строчка разполагается в read-only сегменте, так что туда писать нельзя


> char* equation = "2к=3и";

> char* sep = strchr(equation, '=');
> char* leftSide = equation;
> char* rightSide = sep + 1;
> sep = '\0';

>после выполнения последней команды sep содержит Bad Ptr,

а тут ты ж присваиваешь 0 самому указателю конечно, 0 — это bad ptr..
надо бы вот так:
*sep = '\0'

но в этом случае ты тоже огребёшь вышеугазанную же ошибку по той же самой причине

В общем, нужно так:

    char equation[] = "2к=3и";
    char* sep = strchr(equation, '=');
    char* leftSide = equation;
    char* rightSide = sep + 1; 
    *sep = '\0';
Homo sum et nihil humani a me alienum puto...
Re: Проблема с указателями
От: LaptevVV Россия  
Дата: 25.05.06 07:37
Оценка:
Здравствуйте, xptr, Вы писали:

X>Вот такая ситуация:

X>нужно разделить уранение на левую и правую часть, разделение осуществляется знаком равенства.
X>Пишу следующий код:

X> char* equation = "2к=3и";

X> char* sep = strchr(equation, '=');
X> char* leftSide = equation;
X> char* rightSide = sep + 1;
X> sep = '\0';

X>после выполнения последней команды sep содержит Bad Ptr,

X>что не правильно делаю???

sep = 0;
или
sep = NULL;

Только зачем ты это делаешь?
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: Проблема с указателями
От: Ubivetz Украина  
Дата: 25.05.06 11:53
Оценка:
Здравствуйте, xptr, Вы писали:

X>Господа, день добрый, подскажите пожайлуста!!!


X>Вот такая ситуация:

X>нужно разделить уранение на левую и правую часть, разделение осуществляется знаком равенства.
X>Пишу следующий код:

X> char* equation = "2к=3и";

X> char* sep = strchr(equation, '=');
X> char* leftSide = equation;
X> char* rightSide = sep + 1;
X> sep = '\0';

X>после выполнения последней команды sep содержит Bad Ptr,

X>тогда пишу так:

X> char* equation = "2к=3и";

X> char* sep = strchr(equation, '=') — 1;
X> char* leftSide = equation;
X> char* rightSide = sep + 2;
X> sep[1] = '\0';

X>после выполнения последней команды выпадает ошибка:


X>Unhandled exception at 0x0041368b in win2.exe: 0xC0000005: Access violation writing location 0x0041563e.

X>где 0x0041563e адрес символа равно.

X>что не правильно делаю???


// test.cpp
#include <stdio.h>
#include <string.h>

using namespace std;

int main ( int argc, char ** argv )
{
    char* equation = "2=3";
    char* sep = strchr(equation, '=');
    if ( sep )
    {
    unsigned len = sep - equation;

    char* leftSide = new char[len + 1];
    strncpy( leftSide, equation, len );
    char* rightSide = strdup( sep + 1 );

    printf ( "leftSide is '%s' right side is '%s'\n",
                 leftSide,
             rightSide );
      delete [] leftSide;
      delete [] rightSide;
    }
    else
    {
    fprintf( stderr, "Separator has not been found!" );
    }
    return 0;
}

Работает. Проверено.
Эх, люблю выпить и переспать с кем нибудь!
Но чаще выходит перепить с кем — нибудь и выспаться...
Re: Проблема с указателями
От: xptr http://leadercom.ru
Дата: 25.05.06 12:54
Оценка:
Спасибо, огромное...
смотрю вопрос совсем ламерский..
Re[2]: Проблема с указателями
От: Аноним  
Дата: 25.05.06 21:45
Оценка:
ага, мля!
написал и смотрит, любуется!..

X>Спасибо, огромное...

X>смотрю вопрос совсем ламерский..
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.