Элементы, не входящие в массив в C - PullRequest
0 голосов
/ 23 апреля 2020

У меня проблема с входящими в мой массив персонажами, это мой код ниже:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "graph.h"


void getfile(char[], char[]);
void reachable(char[]);

int size;
int i;

////////////GETFILE FUNCTION/////////////

void getfile(char *graph, char *source) {
    FILE *infile;
    infile = fopen(graph, "r");

    if (infile == NULL) {
        fprintf(stderr, "Can't open input file %s!\n", graph);
        exit(1);
    }
    while (fscanf(infile, "%s", &source[i]) != EOF) {
        ++i;
    }
    fclose(infile);

    size = strlen(source);
    printf("%s\n", source);


    reachable(&source[0]);
}

///////////REACHABLE FUNCTION////////////
void reachable (char *source){
char odd[100];
char even[100];

//printf("%s\n", odd);
//printf("%s\n", even);

    int i;


    for (i = 0; i<size; i+=2){
//        printf("%c", source[i]);
         odd[i] =  source[i];
    }

    for (i = 0; i<size; i++){
        even[i] = source[i];
    }
    printf("%s\n", odd);
}

Вывод:

rlxrtgacufkrzyngilzxazrasjsbjqqitxmewplhtwzgxhokfmadrv
r
rlxrtgacufkrzyngilzxazrasjsbjqqitxmewplhtwzgxhokfmadrv

Закомментированная строка в моем первом для l oop в разделе «REACHABLE FUNCTION» правильно печатает все остальные переменные из исходного исходного массива. однако, когда я добавляю odd[i] = source[i], он разрывается и отображает только первую строку строки, которая находится в моем массиве source.

Это вывод, который я пытаюсь получить при печати моего odd массив:

rlxrtgacufkrzyngilzxazrasjsbjqqitxmewplhtwzgxhokfmadrv
rxtaukznizarssjqtmwltzxofar

Кто-нибудь знает, почему это происходит? Заранее спасибо! -OppositeIllusion

1 Ответ

0 голосов
/ 23 апреля 2020

Две проблемы.

  1. Вы проходите через источник скачками 2 i+=2, но вы не должны также проходить через ваш вывод odd[] скачками 2. То Индекс должен увеличиваться на одну каждую итерацию.

  2. Вы не равны null, заканчивая свои строки. printf будет продолжать пытаться печатать символы, пока не достигнет символа со значением 0. Таким образом, строка «Hello» на самом деле составляет 6 байтов, а не 5, потому что в конце есть невидимый 0, чтобы сообщить printf и kin, когда строка закончилась. И это фактическое число ноль х [конец] = 0; (правильно), а не символ x [end] = '0'.

...