Доступ к 3 символам из строки каждый раз в C - PullRequest
0 голосов
/ 16 февраля 2020

Я пытаюсь получить данные из файла. Файл содержит целочисленные данные в каждой строке. Длина данных варьируется в каждой строке. В то время как я получаю доступ к каждой строке с fgets(), я получаю строку в строковом формате. Я хочу получить доступ к 3 символам строки каждый раз, пока не появится символ новой строки (\n).

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h>
int main(int argc,char* argv[]) 
{ 
    int k,a;
    char res[300] = "";
    char buff[1026];
    FILE *ip,*op;
    ip = fopen(argv[1],"r");
    op= fopen(argv[2],"w+");
    if( ip == NULL) 
           {
                     perror("An error has occurred\n");
                       exit(1);
           }

    while(fgets(buff, sizeof(buff), fp))
    {       i=0;
            int len = sizeof(buff) / sizeof(buff[0]);

Теперь у баффа есть первая строка файла в виде строки. Я хочу использовать для l oop, чтобы каждый раз получать 3 символа строки до \n, затем моя программа переместится на следующую строку.

Я скорее парень Python и в Python я могу сделать это, используя для l oop и доступа к индексу [i:i+2]. Это даст мне 3 индекса каждый раз, я не уверен, как это сделать в C. Может быть, я могу взять другую строку (S1) и перебирать buff для 3 символов каждый раз и добавлять 3 символа в новую строку. Затем я сделаю мои проверки и инициализирую строку S1 для следующей итерации. Это выглядит немного грязно.

Есть ли другой хороший способ сделать это? Пожалуйста, помогите.

1 Ответ

1 голос
/ 16 февраля 2020

Я больше всего python парень, и в python я могу сделать это, используя для l oop и получая доступ к индексу [i: i + 2]. Это даст мне 3 индекса каждый раз, я не знаю, как это сделать в C.

. При заданном индексе i вы хотите получить доступ к s[i], s[i+1] и s[i+2]. в C.

Чтобы скопировать все 3 в один go, вы можете использовать memcpy или strncpy с начальным адресом &s[i].

Например, если Вы не заботитесь о нулевом символе, вы можете сделать:

char d[3];
memcpy(d, &s[i], 3);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...