Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Проблемы с вход. и выход. массивами в Си


Автор: DanilSoldatov 29.5.2008, 15:32
Привет господа програмисты!
 
Вопрос наверное очень глупый но тем не менее...для меня это вопросsmile
Есть функция с входным массивом aData и выходным outData, которая берет размер aStrLen из массива aData и по нему копирует данные в выходной массив outData
 
Код

WORD StrFromArray( char *aData, int len, const int aFromPos, char *outData)
{
  WORD aStrLen;
 
  aStrLen = WordFromArray(aData, aFromPos);
 
  memset( outData, 0, aStrLen);
  for ( int i = aFromPos + 2; i <= aFromPos + aStrLen + 1; i++ )
  {
        DBG_PutS(aData[i]);           //функция для дебага
      outData[i - aFromPos - 2] = aData[i]; // просто присваиваю элемент массива aData элементу outData
      DBG_PutS(outData[i - aFromPos - 2]);
  }
 
  return aStrLen;
}

 
Вызываю так:
Код

char *vResultBuf, *aErrorMessage;
StrFromArray(vResultBuf, strlen(vResultBuf), 19, aErrorMessage);

 
 
а в дебаге вижу:
 
Код

aData[21] = 205  
 
outData[0] = 0  
 
aData[22] = 229  
 
outData[1] = 0  
 
aData[23] = 229  
 
outData[2] = 59  
 
aData[24] = 238  
 
outData[3] = 32  
и т.д

 
 
Т.е. я явно в цикле присваиваю элементу одного массива элемент другого, а в дебаге вижу, что элементы outData и aData отличаются
И мало того: массив outData я обнуляю перед циклом, а он не нулевой (как это видно в дебаге). Как это можно объяснить?

Автор: Fazil6 29.5.2008, 15:41
Код

DBG_PutS(aData[i]); 

покажи эту функцию

Добавлено через 3 минуты и 41 секунду
если выводит aData[21] = 205 , то у тебя какие-то траблы с приведением типов. Не может char  быть 205 или 229

Автор: DanilSoldatov 29.5.2008, 15:55
void DBG_PutS( char *p );

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

Код

DBG_PutS(ssprintf( "\n\raData[%u] = %u \r\n", i, aData[i] ));

DBG_PutS(ssprintf( "\n\routData[%u] = %u \r\n", i - aFromPos - 2, outData[i - aFromPos - 2] )); 



Я думаю ошибка там где-то в указателях

Цитата

Не может char  быть 205 или 229

Почему это? может!

Автор: Fazil6 29.5.2008, 16:09
Код

void DBG_PutS( char *p );

а передаешь ему char,   smile 
Код

 DBG_PutS(aData[i]);

Цитата(DanilSoldatov @  29.5.2008,  15:55 Найти цитируемый пост)
Почему это? может! 

уверен? Я всегда считал, что максимальное число умещающееся в char не больше 127

Добавлено через 8 минут и 2 секунды
так что выводит
Код

DBG_PutS(ssprintf( "\n\raData[%u] = %c \r\n", i, aData[i] ));

?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)