fgets имеет больше символов, чем предполагалось

Привет, я пытаюсь использовать fgets, чтобы взять строку из стандартного ввода и сохранить ее на входе, затем ее следует сравнить с массивом слов (более 50000 слов, взятых из текстового файла), используя метод strcmp, но я никогда не мог получить их сравнивать по какой-то причине, пока я не узнал, почему вот мой код.

char[] text;// <----------array is already full and working at this point I just 
char input[24];//         thought I'd include this for the memcpy
char check[24]="happ";
fgets(input,24, stdin);

for(int i=0; i < 50000; i++){
  memcpy(check, text[i], strlen(input));// this is supposed to get a substring


    if(strcmp(check, input) == 0){// this is supposed to auto complete 
        printf("%s",text[i]);}// say for example 4 letters are inputted the entire 
//array will be checked if they have the same letters then that word will be printed


printf("\n %lu %s\n",strlen(check),check);
printf("\n %lu %s\n",strlen(input),input);

если «happ» вставлен, он должен распечатать последнюю букву в массиве и его размер, который должен быть 4, но stdin «5 happ». Я думал, что в конце ввода может быть \n, поэтому я использовал temp и получил подстрока ввода длиной strlen(input)-1, но все, что я получил, это "6 happ\377", пожалуйста, помогите, я пытался исследовать это, но я не понимал, что с ним не так, поэтому я не знал, что исследовать


person fahim    schedule 29.11.2015    source источник
comment
Массив char без размера на самом деле не помогает. Насколько это велико?   -  person cadaniluk    schedule 29.11.2015
comment
char[] text; Это скомпилировано? Это тоже без размера?   -  person ameyCU    schedule 29.11.2015
comment
Во-первых, знаете ли вы, что fgets() сохраняет любые newline в конце строки? Во-вторых, с memcpy(check, text[i], strlen(input)); вы не копируете терминатор строки, поэтому последующий strcmp(), вероятно, упадет. --› memcpy(check, text[i], strlen(input)+1);   -  person Weather Vane    schedule 29.11.2015
comment
Я понимаю, что английский не может быть вашим родным языком, но вы наверняка слышали о пунктуации, верно?   -  person Mike Nakis    schedule 29.11.2015
comment
@ameyCU Я просто включил текст char[], чтобы показать, что он используется в коде, который я уже инициализировал и присвоил ему значения в исходном коде. Я не знал, нужно ли вам это, потому что в нем должно храниться более 50000 слов, которые все были взяты из текстового файла.   -  person fahim    schedule 30.11.2015


Ответы (1)


Я смог найти ответ, наконец, это было простое решение

int cch=strlen(input-1);
if (cch > 1 && input[cch-1] == '\n')
input[cch-1] = '\0';
person fahim    schedule 30.11.2015