@Femid
Мутант

Как правильно обращаться с массивом строк в си,си++?

bool in_list(char *l1[],char *l2,int kolvo) {
			int i;
			for (i = 0; i < kolvo; i++) {
				if (strcmp(l1[i], l2) == 0) {
					return true;
				}
			}
			return false;
		}
int func(){
                FILE *f;
		int nom;
		char gr[8];
		char fam[12];
		int oc[3];;
		int k=0,i;
		char *f_n;
		char  *grps[] = {""};

		f_n = (char*)(void*)Marshal::StringToHGlobalAnsi(openFile1->FileName->ToString());
		f = fopen(f_n, "r");
		while (fscanf(f,"%d",&nom)!=EOF) {
			fscanf(f, "%s%s", gr,fam);
			for (i = 0; i < 3; i++) fscanf(f, "%d", &oc[i]);
			if (!(in_list(grps, gr, k))) {
				grps[k] = new char[8];
				strcpy(grps[k],gr);
				k++;
				String ^p = gcnew String(gr);
				this->comboBox1->Items->Add(p);

			}
			String^ st = gcnew String("");
			String ^q = gcnew String(gr);
			String ^p = gcnew String(fam);
			st = st + nom;
			if (st->Length == 1)
				st = " " + st;
			st = st + "  " + q + "  " + p + "  " + oc[0] + "  " + oc[1]
				+ "  " + oc[2] + "\n";
			this->richTextBox1->AppendText(st);

		}
		fclose(f);
		//f = fopen(f_n, "r");
		//fclose(f);
	}
	else
		MessageBox::Show("Ошибка открытия файла");
	flag = 0;
}

Нужно сделать так чтобы все gr собрались в grps притом один раз каждая, создать список групп
Но получается так, что в grps храниться только первая gr, а последующие не записываются.
  • Вопрос задан
  • 106 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
http://dilbert.com/strip/1998-08-24
char *grps[] = {""};
Но получается так, что в grps храниться только первая gr, а последующие не записываются.

Ты понимаешь, что у тебя в массиве grps -- один единственный элемент, и запись всех элементов после первого происходит мимо этого массива, куда-то на стек, портя другие данные?

grps[k] = new char[8];
...
String^ st = gcnew String("");

А если твой вопрос не про С, то поправь теги.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Chronicler
@Chronicler
Программист
Использовать std::string и std::vector
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы