Итак, я получил задачу сделать программу, которая будет принимать ввод, пока я не напишу "KRAJ"
. Но когда я печатаю его с puts()
, он будет иметь 3 символа больше в первых трех местах. Скажем, я пишу "finish meKRAJ"
он должен напечатать только "finish me"
, но он печатает "ć[]'finish me"
gets() и puts() показывает символы, которые я не вводил
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char text[100];
char entry[100];
int i;
int flag=1;
int flag2;
do{
printf("Enter txt:finish by writing KRAJ\n");
gets(entry);
for(i=0;i<strlen(entry);i++){
if(entry[i] == 'K' && entry[i+1] == 'R' && entry[i+2] == 'A' && entry[i+3] == 'J'){
strncat(text,entry,i);
flag=0;
flag2=1;
break;
}
else{
flag2=0;
}
}
if(!flag2)strcat(text,entry);
}while(flag);
printf("\n You have entered:\n");
puts(text);
//testing first char
printf("\nTesting first char:%c",text[0]);
printf("\ntxt lenght:%d",strlen(text));
return 0;
}
Вы не должны использовать 'gets()', который неизбежно рискует переполнением буфера, устарел на C99 и удален в C11. – MikeCAT
'printf (" \ ntxt lenght:% d ", strlen (текст));' будет вызывать * неопределенное поведение * для передачи данных, имеющих неправильный тип: '% d' вызывает' int', но то, что возвращается с 'strlen 'is' size_t'. – MikeCAT
Вы используете переменную с автоматическим временем хранения 'text' без инициализации и вызова * неопределенного поведения *. – MikeCAT