|
|
|
Откуда появился терминатор?
|
|||
|---|---|---|---|
|
#18+
Перед вызовом функции BinToDec app содержит массив элементов 0и1, а после вызова фукции - тот же массив, но нулевой элемент app - терминатор '\0' Код: plaintext 1. 2. 3. 4. 5. 6. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 14:04 |
|
||
|
Откуда появился терминатор?
|
|||
|---|---|---|---|
|
#18+
Может всё дело в моей кривой функции перевода двоичного числа в десятичное. Может есть у кого-нить функция покрасивее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 15:37 |
|
||
|
Откуда появился терминатор?
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. resut*=2; до вызова result==0 во время 0*=2; получаем 0 result==0 во время 0*=2; получаем 0 result==0 во время 0*=2; получаем 0 result==0 во время 0*=2; получаем 0 result==0 во время 0*=2; получаем 0 result==0 во время 0*=2; получаем 0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 16:27 |
|
||
|
Откуда появился терминатор?
|
|||
|---|---|---|---|
|
#18+
там такая штучка есть Дебаггер называется :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 16:29 |
|
||
|
Откуда появился терминатор?
|
|||
|---|---|---|---|
|
#18+
МысльСреды Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. resut*=2; до вызова result==0 во время 0*=2; получаем 0 result==0 во время 0*=2; получаем 0 result==0 во время 0*=2; получаем 0 result==0 во время 0*=2; получаем 0 result==0 во время 0*=2; получаем 0 result==0 во время 0*=2; получаем 0[/quot] Это если только при вызове функции в качестве параметра дать 0, а я про другое спрашивал. У меня app было объявлено через memset , попробовал через new - значения принимает правильные, но в конце выкидывает ошибку на память ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 16:30 |
|
||
|
Откуда появился терминатор?
|
|||
|---|---|---|---|
|
#18+
МысльСредытам такая штучка есть Дебаггер называется :-) См. внимательно 1ое сообщение, как по вашему я узнал про "содержание" переменных, иссесвенно с помощью дебаггера ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 16:31 |
|
||
|
Откуда появился терминатор?
|
|||
|---|---|---|---|
|
#18+
Я говорю int BinToDec(char* value){ int result = 0; for(int i = 0;i < strlen(value);i++){ result *= 2; if (value == '1') result++; } return result; ..Возвращается естественно 0 } ВСЕГДА будет возвращать 0 (ноль) В функции Ты(Вы) выполняешь умножение 0(нуля) на 2 то кол-во раз которое соответствует кол-ву символов в строке. И в итоге ВСЕГДА получаешь ноль ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 16:33 |
|
||
|
Откуда появился терминатор?
|
|||
|---|---|---|---|
|
#18+
сорри бес попутал Попробуй if (value == '1') result++; заменить на if (value == '1') ++result; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 16:34 |
|
||
|
Откуда появился терминатор?
|
|||
|---|---|---|---|
|
#18+
В чем может быть загвоздка. Объявил в теле функции app через ( Код: plaintext Далее все операции, в которых участвует app Код: plaintext 1. если перед return поставить delete[] app;? то сругнется на память, если память не освободить - то без ошибок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 16:35 |
|
||
|
Откуда появился терминатор?
|
|||
|---|---|---|---|
|
#18+
МысльСредысорри бес попутал Попробуй if (value == '1') result++; заменить на if (value == '1') ++result; Да не в том проблема, если на вход функции подать значение(параметр), то функция возвращает то что надо, но в моем случает "портится указатель", который я передаю в качестве указателя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 16:36 |
|
||
|
Откуда появился терминатор?
|
|||
|---|---|---|---|
|
#18+
sax_ МысльСредысорри бес попутал Попробуй if (value == '1') result++; заменить на if (value == '1') ++result; Да не в том проблема, если на вход функции подать значение(параметр), то функция возвращает то что надо, но в моем случает "портится указатель", который я передаю в качестве указателя. И "портится" по всей по всей видимости не в BinToDec. Я что-то явно неправильно сделал или с объявлением функции, или с выделением ей памяти или же неправильно использовал функции для работы с указателями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 16:38 |
|
||
|
Откуда появился терминатор?
|
|||
|---|---|---|---|
|
#18+
Извиняюсь Гнал.. int BinToDec(char* value){ int result = 0; for(int i = 0;i < strlen(value);i++) { result *= 2; if (value == '1') result++; } return result; } int _tmain(int argc, _TCHAR* argv[]) { char app[]="0110001001"; //Здесь app "принимает значение" "0110001001" std::cout<< BinToDec(app); //Здесь app уже "\0110001001" return 0; } работает нормально ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 16:42 |
|
||
|
Откуда появился терминатор?
|
|||
|---|---|---|---|
|
#18+
bitArray как объявлен? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 16:44 |
|
||
|
Откуда появился терминатор?
|
|||
|---|---|---|---|
|
#18+
Прошу наших ГУРУ разъяснить мне следущее: Код: plaintext 1. 2. 3. 4. Это как бы "начало" кода, естественным завершением долно быть освобождение памяти; если сделать так Код: plaintext 1. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 16:46 |
|
||
|
Откуда появился терминатор?
|
|||
|---|---|---|---|
|
#18+
sax_В чем может быть загвоздка. Объявил в теле функции app через ( Код: plaintext Далее все операции, в которых участвует app Код: plaintext 1. если перед return поставить delete[] app;? то сругнется на память, если память не освободить - то без ошибок. Гхм int _tmain(int argc, _TCHAR* argv[]) { char Array[]="hello"; char* app = new char[11]; strcpy (app, "\0"); strncpy(app, (char*)&Array[0], 10); std::cout<<app; delete[] app; return 0; } Компилится и работет без проблем ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 16:50 |
|
||
|
Откуда появился терминатор?
|
|||
|---|---|---|---|
|
#18+
И ещё! Если при объявлении я знаю, что массив char будет содержать 10 элементов, как правильно его объявить? Код: plaintext Код: plaintext Надо ли оставлять место для терминатора "\0"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 16:51 |
|
||
|
Откуда появился терминатор?
|
|||
|---|---|---|---|
|
#18+
МысльСреды sax_В чем может быть загвоздка. Объявил в теле функции app через ( Код: plaintext Далее все операции, в которых участвует app Код: plaintext 1. если перед return поставить delete[] app;? то сругнется на память, если память не освободить - то без ошибок. Гхм int _tmain(int argc, _TCHAR* argv[]) { char Array[]="hello"; char* app = new char[11]; strcpy (app, "\0"); strncpy(app, (char*)&Array[0], 10); std::cout<<app; delete[] app; return 0; } Компилится и работет без проблем Не спорю, это работоспособно, но попробуй array объявить как Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 16:53 |
|
||
|
Откуда появился терминатор?
|
|||
|---|---|---|---|
|
#18+
sax_Прошу наших ГУРУ разъяснить мне следущее: Код: plaintext 1. 2. 3. 4. Это как бы "начало" кода, естественным завершением долно быть освобождение памяти; если сделать так Код: plaintext 1. Код: plaintext 1. Гхм int _tmain(int argc, _TCHAR* argv[]) { char* bitArray = new char[128]; char* num = new char[31]; strncpy(num, (char*)&bitArray[16], 30); std::cout<<num; std::cout<<bitArray; delete[] num; delete[] bitArray; return 0; } Компилится и работает без проблем Почему делаешь указатель unsigned ??? unsigned char* num = new char[31]; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 16:55 |
|
||
|
Откуда появился терминатор?
|
|||
|---|---|---|---|
|
#18+
А ещё красивее получается если int _tmain(int argc, _TCHAR* argv[]) { char* bitArray = new char[128]; char* num = new char[31]; strcpy(bitArray, "Hello"); strncpy(num, bitArray, 30); //Вот тут перетурбации с & лишние std::cout<<num; std::cout<<bitArray; delete[] num; delete[] bitArray; return 0; } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 17:01 |
|
||
|
Откуда появился терминатор?
|
|||
|---|---|---|---|
|
#18+
МысльСредыА ещё красивее получается если int _tmain(int argc, _TCHAR* argv[]) { char* bitArray = new char[128]; char* num = new char[31]; strcpy(bitArray, "Hello"); strncpy(num, bitArray, 30); //Вот тут перетурбации с & лишние std::cout<<num; std::cout<<bitArray; delete[] num; delete[] bitArray; return 0; } А у меня чего-то ругается! Насчет перетурбаций - это я делаю, когда надо скопировать начиная не с нелевого элемента ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 17:07 |
|
||
|
Откуда появился терминатор?
|
|||
|---|---|---|---|
|
#18+
int _tmain(int argc, _TCHAR* argv[]) { char* bitArray = new char[128]; char* num = new char[31]; strcpy(bitArray, "Hello"); //++bitArray; strncpy(num, bitArray, 30); //--bitArray; std::cout<<num; std::cout<<bitArray; delete[] num; delete[] bitArray; return 0; } Так вывод : HelloHello Раскомментируй где //. Будет: elloHello ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 17:18 |
|
||
|
Откуда появился терминатор?
|
|||
|---|---|---|---|
|
#18+
или так char* bitArray = new char[128]; char* num = new char[31]; strcpy(bitArray, "Hello"); char* from3=bitArray; from3+=3; strncpy(num, from3, 30); std::cout<<num; std::cout<<bitArray; Вывод loHello ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 17:23 |
|
||
|
Откуда появился терминатор?
|
|||
|---|---|---|---|
|
#18+
sax_Прошу наших ГУРУ разъяснить мне следущее: Код: plaintext 1. 2. 3. 4. Это как бы "начало" кода, естественным завершением долно быть освобождение памяти; если сделать так Код: plaintext 1. Код: plaintext 1. Где то при обращении bitArray[X] занчение X превышает размерность ( 128 ). автор Может всё дело в моей кривой функции перевода двоичного числа в десятичное. Может есть у кого-нить функция покрасивее? идея такова: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 17:27 |
|
||
|
Откуда появился терминатор?
|
|||
|---|---|---|---|
|
#18+
onstat-[quot sax_] int BinToDec(char* value){ int result = 0; int mask = 1; int size =strlen(value); if( size > sizeof(result) ) // проверка { throw some_exception("Подозревается потеря разрядов при преобразовании\n"); }; for(int i = size-1 ; i >=0 ;i--){ if (value == '1') { result=result|mask; }; mask<<1; } return result; }; [/src] Работает или не правильно, или вы меня не поняли. На вход (char* value) подается последовательность 0 и 1, т.е. если подать value="10000000" , то функция должна выдать 128 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 17:49 |
|
||
|
Откуда появился терминатор?
|
|||
|---|---|---|---|
|
#18+
//onstat- Тем более вариант, изложенный вами будет ругаться на любое двоичное число(находящееся в value), большее 255, т.к. если value 255? т.е value ='100000000' т.е strlen(value) = 9, а sizeof(result) , где result - типа int равен 8 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 17:58 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34313413&tid=2029485]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
90ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
76ms |
get tp. blocked users: |
2ms |
| others: | 256ms |
| total: | 470ms |

| 0 / 0 |
