powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / C++ [игнор отключен] [закрыт для гостей] / Пример на спекалку
5 сообщений из 5, страница 1 из 1
Пример на спекалку
    #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
Пример на спекалку
    #32119390
wertyuiop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1) Environment указать нужно.
OS+Hardware+Compiler
Стек-то куда растет?
2) char(0) -- символ '\0' ; char(nTotalLength) ?;
3) ну и код, брр... макросы ( va_start ... ) не хочется использовать?
...
Рейтинг: 0 / 0
Пример на спекалку
    #32119401
wertyuiop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну и указатель потерялся, ладно
...
Рейтинг: 0 / 0
Пример на спекалку
    #32121422
YuriAM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прекрасная ошибка . Мы тоже долго алгоритм посмотрели , пока не поняли,
что дело именно в конструкторе char;

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

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

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


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