Гость
Форумы / C++ [игнор отключен] [закрыт для гостей] / Пример на спекалку / 5 сообщений из 5, страница 1 из 1
12.03.2003, 14:21
    #32118321
YuriAM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример на спекалку
Данный пример содержит ошибку( очень хорошую ) требуеться найти
Посмотрите для себя, насколько трудно бывает иногда найти частицы.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
#include  "stdafx.h" 
#include  "string.h" 
#include  "stdio.h" 

// The last argument should be   0 
char* MyStrCat(char* pChar,...)
{
	char** ppA = &pChar;
	char* pReturn=new char( 0 );
	
	int nTotalLength;
	char* pNewString;
	char* pCurArg;
	while (pCurArg = *ppA++)
	{
		nTotalLength = strlen(pReturn)+strlen(pCurArg)+ 1 ;
		pNewString = new char(nTotalLength);
		strcpy(pNewString,pReturn);
		delete pReturn;
		pReturn = pNewString;
		strcat(pReturn,pCurArg);
	}
	return pReturn;
}

int main(int argc, char* argv[])
{
	printf( "%s\n" ,MyStrCat( "1aaaaa" , "2bbb" , "3cccc" , 0 ) );
	return  0 ;
}
...
Рейтинг: 0 / 0
13.03.2003, 14:33
    #32119390
wertyuiop
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример на спекалку
1) Environment указать нужно.
OS+Hardware+Compiler
Стек-то куда растет?
2) char(0) -- символ '\0' ; char(nTotalLength) ?;
3) ну и код, брр... макросы ( va_start ... ) не хочется использовать?
...
Рейтинг: 0 / 0
13.03.2003, 14:40
    #32119401
wertyuiop
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример на спекалку
ну и указатель потерялся, ладно
...
Рейтинг: 0 / 0
17.03.2003, 17:32
    #32121422
YuriAM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример на спекалку
Прекрасная ошибка . Мы тоже долго алгоритм посмотрели , пока не поняли,
что дело именно в конструкторе char;

В строке
Код: plaintext
1.
pNewString = new char(nTotalLength);

Береться строка длиной nTotalLength
так что ошибка кроеться в скобках.
В одном случае береться инициализированный байт, а в другом столько байтов.

Надо было писать -
Код: plaintext
1.
pNewString = new char[nTotalLength];
...
Рейтинг: 0 / 0
17.03.2003, 18:34
    #32121472
wertyuiop
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример на спекалку
дрессировки не хватает.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Пример на спекалку / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]