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

Тема в разделе "Общие вопросы по С и С++", создана пользователем kopermian, 14 фев 2007.

Статус темы:
Закрыта.
  1. kopermian

    kopermian Гость

    Есть такая проблема!
    Считываеться строка с файла.
    Затем эту строку нужно разобрать!
    А поскольку подстроки разделяються символом "@", с этим проблем нет!
    Код (Text):
    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);
    }

    }
    Далее разбиваю строку на подстроки и сохраняю в структуре!
    Код (Text):
    struct Tmemo{
    char TMV[12];
    char KOD[10];
    char FIRM[50];
    char DATA[10];
    } STROK;
    Код (Text):
    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;
    }
    }
    }
    }
    }
    }
    Все работает и разбирает, но потом в при вызове типа!
    Код (Text):
    printf("%s", STROK.DATA);
    Выводит то что осталось после последнего знака "@", и полную строку (исходную которая разбиралась)!!
    Непонятно почему, если в структуре задан масив из 10 знаков, а при вызове strlen(STROK.DATA), отображает не 10 а 87, тоисть последние 10 символов + полная строка! (без первого символа)!
    Код писался на "С", и компилировался на Borland Turbo C++ Version 3.0.
     
  2. Kmet

    Kmet Well-Known Member

    Регистрация:
    25 май 2006
    Сообщения:
    1.017
    Симпатии:
    1
    забываешь терменировать \0 строки
     
Загрузка...
Похожие Темы - Непонятки (разбор строки)
  1. LuMee
    Ответов:
    6
    Просмотров:
    3.108
  2. alb
    Ответов:
    0
    Просмотров:
    2.027
Статус темы:
Закрыта.

Поделиться этой страницей