Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.06.2012, 09:57   #1
vruleb
Новичок
Джуниор
 
Регистрация: 22.06.2012
Сообщений: 3
По умолчанию Крашится программа

Имеется такой вот код

Код:
#include <stdio.h>

char *F12(char **p[], int n)
{ int k,i,j;
for (k=i=0;p[i]!=NULL;i++)              //Перебор строк
    for(j=0;p[i][j]!=NULL;j++,k++)      //Подсчёт количества символов
        if (k==n) return(p[i][j]);      //Если кол-во символов в строке равно или больше n,                                            
    return(NULL);}                      //возвратить строку, иначе возвратить NULL
int main(){
    int n=4;
    char *k[2][20]={{"test1"},{"end"}}, **p;
    p=k[2];
    F12(&p, n);
}
Почему-то при его выполнении программа крашится в строке for(j=0;p[i][j]!=NULL;j++,k++) . Помогите найти в чём проблема.

Последний раз редактировалось vruleb; 22.06.2012 в 12:14.
vruleb вне форума Ответить с цитированием
Старый 22.06.2012, 11:49   #2
Krok27
Форумчанин
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Сообщений: 505
По умолчанию

Много недочетов.
Код:
p=k[3];
выход за пределы массива.
У тебя всего 2 элемента с индексами 0 и 1.
Знающий не говорит, говорящий не знает (С) Лао Цзы
Krok27 вне форума Ответить с цитированием
Старый 22.06.2012, 12:13   #3
vruleb
Новичок
Джуниор
 
Регистрация: 22.06.2012
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Krok27 Посмотреть сообщение
Много недочетов.
Код:
p=k[3];
выход за пределы массива.
У тебя всего 2 элемента с индексами 0 и 1.
А, это я пока экспериментировал, в конце поставил k[3]. Со значением k[2]
ошибка тоже происходит.
vruleb вне форума Ответить с цитированием
Старый 22.06.2012, 12:48   #4
Krok27
Форумчанин
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Сообщений: 505
По умолчанию

тебя всего 2 элемента с индексами 0 и 1.

Код:
char* F12(char *p[], int n, int arraysize)
{
int i,j, k = 0;
	for( i=0 ; i < arraysize; i++) //Перебор строк
	{
		k = 0;
		for(j=0;p[i][j] != '\0';j++,k++)      //Подсчёт количества символов
		{
			if (k==n) return(p[i]); //Если кол-во символов в строке равно или больше n,
		}
	}
	return(NULL);
}                      //возвратить строку, иначе возвратить NULL
Код:
int main(int argc, char* argv[])
{
	char* p = 0;
	int n=4;
	char k[2][20]={{"end"}, {"test1"}};
	char *ptr[2] = {0}; 
	int i;
	for(i=0;i < 2;i++)
		{
			ptr[i] = &k[i];
		}

	F12(ptr, n,2);

	return 0;
}
Знающий не говорит, говорящий не знает (С) Лао Цзы

Последний раз редактировалось Stilet; 22.06.2012 в 20:43.
Krok27 вне форума Ответить с цитированием
Старый 22.06.2012, 15:33   #5
vruleb
Новичок
Джуниор
 
Регистрация: 22.06.2012
Сообщений: 3
По умолчанию

Спасибо конечно, но в том-то и загвоздка, что саму функцию F12 менять нельзя, а только вызов функции.
vruleb вне форума Ответить с цитированием
Старый 22.06.2012, 21:39   #6
Dizelektwo
Пользователь
 
Регистрация: 05.04.2012
Сообщений: 56
По умолчанию

Код:
void F12( char* str[], int limit, int strNum) {
	
int i=0,m=0,count=0,sumStr=1;	

do
 {
    count++; //подсчет букв
    if(m==strlen(str[i])-1 && i<strNum) { //если прочитана вся строка и массив не заканчивается последней строкой
        i++;  //переходим к следующей строке
	m=-1; //ставим счетчик следующий строки в ее начало
	sumStr++; //число строк
}
m++;
 }
 while(m!=strlen(str[i]));

 double razn=count/sumStr;
 cout << "String: " << sumStr << endl; //число строк
 cout << "Simbols: " << count << endl; //общее число символов
 cout << "Normal arifmetic: " << razn << endl; //сред.арифметический объем строк
}

int main() {

int limit=5; //лимит символов для условия сравнения
int strNum=2; //число строк
char *strDump[]={"hello","my","darling"};

F12(strDump,limit,strNum);
system("pause");
return 0;
}
Достаточно только добавить нужное условие. Минимум извращений со ссылками

Последний раз редактировалось Dizelektwo; 22.06.2012 в 22:30.
Dizelektwo вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа с применением записей и программа с применение множеств smert99 Помощь студентам 0 16.06.2011 23:14
Программа открыается если есть другая программа. bookkc Паскаль, Turbo Pascal, PascalABC.NET 12 14.10.2009 20:09
[PASCAL]Программа создания файла, программа обработки файла Виколяшка Фриланс 7 23.09.2009 17:38
Программа создания файла, программа обработки файла [PASCAL] Виколяшка Помощь студентам 1 22.09.2009 22:56