• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Непонятки! (разбор строки)

  • Автор темы kopermian
  • Дата начала
Статус
Закрыто для дальнейших ответов.
K

kopermian

Есть такая проблема!
Считываеться строка с файла.
Затем эту строку нужно разобрать!
А поскольку подстроки разделяються символом "@", с этим проблем нет!
Код:
void sthit(){	//Считываем файл
fp=fopen("GOD.txt", "r");
int a, f=0;
if(!feof(fp)){
for(a=0; a<=100; a+=1){
if(f==0){
fread(&mas[a], sizeof(char), 1, fp);
if(mas[a]=='\n') f=1;
}
}
printf("%s \n", mas);
}

}
Далее разбиваю строку на подстроки и сохраняю в структуре!
Код:
struct Tmemo{
char TMV[12];
char KOD[10];
char FIRM[50];
char DATA[10];
} STROK;

Код:
void razbor(char str1[100]){//Разбор строки на составные
int a, f, k=0, p=0;
a=strlen(str1); //Узнаем длину строки
for(f=0; f<a; f+=1){ //Цикл повторяеться ровно столько длина строки!
if(k==0){ //Первый IF Повторяеться пока считаеться первая подстрока
STROK.TMV[p]=str1[f];
p+=1;
if(str1[f]=='@') { // При первом попадании в строке символа "@" Перестает Выполняться данный IF
k=1;
p=0;
}
}
else {
if(k==1){ //Второй IF Считывает вторую подстроку
STROK.KOD[p]=str1[f];
p+=1;
if(str1[f]=='@') { // При первом попадании в строке символа "@" Перестает Выполняться данный IF
k=2;
p=0;
}
}
else {
if(k==2){// Считываем третью строку
STROK.FIRM[p]=str1[f];
p+=1;
if(str1[f]=='@') {
k=3;
p=0;
}
}
else {
if(k==3){ // Последняя функция считывает считывает до конца строки, то что осталось за последним "@"
STROK.DATA[p]=str1[f];
p+=1;
}
}
}
}
}
}
Все работает и разбирает, но потом в при вызове типа!
Код:
printf("%s", STROK.DATA);
Выводит то что осталось после последнего знака "@", и полную строку (исходную которая разбиралась)!!
Непонятно почему, если в структуре задан масив из 10 знаков, а при вызове strlen(STROK.DATA), отображает не 10 а 87, тоисть последние 10 символов + полная строка! (без первого символа)!
Код писался на "С", и компилировался на Borland Turbo C++ Version 3.0.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!