Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удаление "мусора" 
:(
    Опции темы
freeKODE
Дата 15.7.2009, 15:28 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 24.5.2009

Репутация: нет
Всего: нет



Нужно удалить мусор из массива ed, он начинается с 48 ячейки походу. Да и вобще откуда он там взялся? В туксе мусор был на одну ячейку и разный, а в венде один и тот же в две ячейки.
Код
/*------------------------
----------lunks.c---------
----цопарайт-free_kode----
------------------------*/
#include <stdio.h>
#include <string.h>
#define MAXPATH 50 //самый большой адрес
#define MAXPROGRAMM 20 //максимальное количество браузеров
int main(int argc, char *argv[]){
FILE *conf;
char lnk[MAXPATH][MAXPROGRAMM],brit[1],allone[1],ed[MAXPATH+15];//массив для адресов браузеров, чет я не въезжаю в эти указатели, посмотри тут
char op1,op2,op3,brs;
char *brsyc;
int i=0,k=0,z=0,brsit,lok,len;
conf=fopen(".luconfig","r");//конец единственного, наверно, правльного блока кода

if (argv[1]==0){
return 0;}

brit[0]=getc(conf);
brit[1]=getc(conf);
brsyc=&brit[0];
lok=atoi(brsyc);
//printf("вот сколько %d\n", lok);
lok -=1;

for(k=0;k<=lok;++k){//заполнения массива адресами, ага пить надо меньше, для красоты;)
    while((lnk[i][k]=getc(conf))!='\n')
    {
    ++i;
    }
    i=0;
}
//printf("вот сколько недо %c\n", lnk[0][1]);

//printf("ааццко параметр %s %d\n",argv[1],argc);

for(k=0;k<=lok;++k){
    for(i=0;i<=MAXPATH;++i){
    ed[i]=lnk[i][k];}
//printf("так-то %s\n",&ed);
}

//printf("хы %s\n",ed);
//printf("ff %d\n",len);
strcat(ed,argv[1]);
//printf("qqq %s\n",ed);

len=strlen(ed);
for(z=0;z<=len;++z){
    if(ed[z]=='\n'){
    ed[z]=' ';}
//system(ed);
//sleep(3);
}

printf("1 %s\n",ed);
//printf("2 %s\n",argv[1]);
printf("3 %c\n",ed[48]);
fclose(conf);
}


Модератор: Учимся пользоваться кнопочкой "Код". И не надо текст выкладывать на внешние сайты.

Это сообщение отредактировал(а) bsa - 15.7.2009, 15:38
PM MAIL Jabber   Вверх
DmitrySDolzhenko
Дата 15.7.2009, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 8.6.2009

Репутация: нет
Всего: нет



Код

for(k=0;k<=lok;++k){
    for(i=0;i<=MAXPATH;++i){
    ed[i]=lnk[i][k];}
//printf("так-то %s\n",&ed);
}


замени на 

Код

for(k=0;k<=lok;++k){
    for(i=0;i<=MAXPATH;++i){
    ed[i]=lnk[i][k];}
ed[i] = 0;
printf("так-то %s\n",ed);
}


или добавь цикл

Код

for( i = 0; i < MAXPATH+15; i++)
ed[i] = 0;


Это сообщение отредактировал(а) DmitrySDolzhenko - 15.7.2009, 16:01
PM MAIL   Вверх
bsa
Дата 15.7.2009, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



freeKODE, ну начнем с того, что код надо бы переформатировать. потому что "это" читать невозможно.
Код
char brit[1], allone[1]; //создали массив символов под один элемент
...
brit[0]=getc(conf); //записали в него что-то
brit[1]=getc(conf); //записали в следующий что-то (т.е. испортили allone, например)
brsyc=&brit[0]; //взяли адрес первого элемента массива
lok=atoi(brsyc); //попытались сделать из него целое число

Итак, в чем ошибки:
1. char brit[1] - выделяет массив под 1 элемент (элементы считаются с 0, т.е. доступ к элементу с индексом 1 - недопустим)
2. доступ ко второму элементу массива brit, когда он состоит только из одного
3. попытка преобразовать строку, которая находится по адресу brsyc в число. Но у тебя там не строка! А один символ. Строка - это массив символов, который оканчивается символом '\0'.

Есть правила форматирования кода:
1. Одна операция - одна строка. (т.е. не стоит писать char lnk[MAXPATH][MAXPROGRAMM],brit[1],allone[1],ed[MAXPATH+15];) Определи каждую переменную на отдельной строке. И у каждой отдельно укажи тип (т.е. не через запятую).
2. Блок внутри операторных скобок должен быть с отступом относительно родительского:
Код
//уровень 0
int main()
{
   //уровень 1
   int a[10];
   for(int i = 0; i < 10; ++i) {
      //уровень 2
      a[i] = 0;
      printf(...);
   }
   if (...) {
      //уровень 2
      scanf(..);
   }
}

3. Закрывающая фигурная скобка всегда идет на отдельной строке и на уровне оператора ее породившего (см. пример)
4. Открывающая фигурная скобка идет или сразу за оператором или на следующей за ним строке (см. пример if и for), но на его уровне (см. пример main). Порядок размещения фигурных скобок должен быть одинаковым для всего проекта, исключение, стиль linux - у меня в примере.
5. Названия переменных должны отражать их назначение (исключение, i,j,k и т.п. используемые как счетчики циклов).
6. Объявление переменной должно быть как можно ближе к первому ее использованию (если позволяет компилятор - старые компиляторы Си это не позволяли).
7. Префиксная форма операторов ++ и -- предпочтительней там, где не требуются функциональные особенности постфиксных.
8. Ставь пробелы вокруг операторов: for(int i = 0; i < 10; ++i) выглядит и понимается легче, чем for(int i=0;i<10;++i)

Это сообщение отредактировал(а) bsa - 15.7.2009, 16:06
PM   Вверх
freeKODE
Дата 15.7.2009, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 24.5.2009

Репутация: нет
Всего: нет



bsa, исправлюсь

DmitrySDolzhenko, увы добавление цикла, не решило проблему с мусором
мусор появляеться (кажись) после strcat(); 
PM MAIL Jabber   Вверх
bsa
Дата 15.7.2009, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(freeKODE @ 15.7.2009,  20:37)
bsa, исправлюсь

Ну и где исправленный код? Ты думаешь кто-то пытается найти ошибки в том коде, что приведен выше? Сомневаюсь. Там их очень много. Отформатируй код, исправь ошибки, на которые указал я, которые указал DmitrySDolzhenko. Может уже и остальные сам найдешь.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0660 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.