0

EDIT: I'd like to write program that takes line of text and two characters from user, then connects characters and searches substring in line of text.

INPUT: 
abababab
a
b

OUTPUT
0

I've written some code, but it returns the wrong index.

So this is struct where I keep data

struct my_msg
{
char character1[3];
char character2[3];
char line[255];
 };

then I collect the data from the user

fgets(msg.linie, 255, stdin);
msg.line[strcspn(msg.line, "\n")] = 0;
    
fgets(msg.character1, 3, stdin);
msg.character1[strcspn(character1, "\n")] = 0;
    
   

fgets(msg.character2, 3, stdin);
msg.character2[strcspn(msg.character2, "\n")] = 0;


then I combine characters by strcat:

char control[10];
strcat(control, msg.character1);
strcat(control, msg.character2);

and I'm looking for an occurrence in string by strstr function

char *result;
char *str = msg.line;
long position;     

if((result = strstr(str, control)) != NULL)
        {
            position = result-str;
            index = strlen(str) - position;
            printf("%d", index);
        }


but still not working.

Roundstic
  • 21
  • 3
  • 2
    `strchr(msg.line, '\n');` does *do* anything. Also `char character1[2];` is enough for one character *or* newline (but not both) and one terminator. – Weather Vane Jan 22 '21 at 19:46
  • 2
    @Roundstic This statement msg.character1[strlen(msg.character1)-1] = '\0'; makes msg.character1 an empty string. – Vlad from Moscow Jan 22 '21 at 19:48
  • My favourite foolproof way: [Removing trailing newline character from fgets() input](https://stackoverflow.com/questions/2693776/removing-trailing-newline-character-from-fgets-input/28462221#28462221) – Weather Vane Jan 22 '21 at 19:54
  • 2
    `strcat(control1, msg.character1);` concatenates to an uninitialized buffer. You would have noticed this had you simply stepped through the code in a debugger. – Raymond Chen Jan 22 '21 at 20:25
  • I have edited my post maybe now it will be clearer – Roundstic Jan 22 '21 at 20:33
  • `char control[10]; strcat(control, msg.character1);` invokes undefined behavior. Don't do that. (See @RaymondChen's comment). – William Pursell Jan 22 '21 at 20:47
  • so can I fix it like this? strcpy(control, msg.character1); strcat(control, msg.character2); – Roundstic Jan 22 '21 at 21:03

0 Answers0