Avatar billede jakobdo Ekspert
25. maj 2003 - 13:37 Der er 10 kommentarer og
1 løsning

Parse en streng, og få tekst ud.

Hej,
jeg har denne streng:

char buffer[]="\r\n\r\nHej Her er morseper!\nHej Her er morseper!\r\n.\r\n";

Og skal have en streng, som efterfølgende indeholder: Hej Her er morseper!\nHej Her er morseper!

Jeg bruger
char *parse = strstr(buffer,"\r\n\r\n")
parse += strlen("\r\n\r\n");
Så indeholder parse: Hej Her er morseper!\nHej Her er morseper!\r\n.\r\n

Men jeg vil jo gerne lige have klippet \r\n.\r\n af...
Avatar billede jakobdo Ekspert
25. maj 2003 - 13:42 #1
#include<stdio.h>
#include<string.h>

int main()
{
    char buffer[]="\r\n\r\nHej Her er morseper!\nHej Her er morseper!\r\n.\r\n";
    char *msg;
    char namstr[]="\r\n\r\n";
    char *message;
    char *parse = strstr(buffer, namstr);
    int i;
    int slut;
   
    if(parse==NULL)
      return 1;
    parse += strlen(namstr);
   
  msg = strstr(parse,"\r\n.\r\n");
  if(msg==NULL)
      return 1;
 
  printf("%d\n",parse);
  printf("%d\n",msg);
  //parse[(int)msg]='\0';
  slut = msg-parse;
  parse[slut+1]='\0';
  printf("%s\n",parse);
  for (i = 0;i < strlen(parse);i++)
  {
      printf("parse[%d] = %x\n",i,parse[i]);
  }
}

Dette giver mig næsten det rigtige svar...
Avatar billede jakobdo Ekspert
25. maj 2003 - 13:57 #2
#include<stdio.h>
#include<string.h>

int main()
{
    char buffer[]="\r\n\r\nHej Her er morseper!\nHej Her er morseper!\r\n.\r\n";
    char msg[100];
    if (locateMsg(buffer,msg)==0)
        printf(msg);
}

int locateMsg(char *buffer, char *valstr)
{
    char start[]="\r\n\r\n";
    char slut[]="\r\n.\r\n";
    char *temp;
    char *parse = strstr(buffer, start);
    int stringSlut;
    if(parse==NULL)
      return 1;
  parse += strlen(start);
  temp = strstr(parse,slut);
  if(temp==NULL)
      return 1;
  stringSlut = temp-parse;
  parse[stringSlut+1]='\0';
  printf("Size af parse: %d\n",strlen(parse));
  strcpy(valstr,parse);
  return 0;
}

Hvorfor printer denne kun:
Hej Her er morseper!
og ikke:
Hej Her er morseper!
Hej Her er morseper!

Kan string copy ikke finde ud af at jeg har \n inde i strengen?
Avatar billede arne_v Ekspert
25. maj 2003 - 15:24 #3
Mystisk.

Den sidste kode printer:

Size af parse: 42
Hej Her er morseper!
Hej Her er morseper!

hos mig !
Avatar billede arne_v Ekspert
25. maj 2003 - 15:24 #4
Og strcpy har ikke problemer med \n.
Avatar billede jakobdo Ekspert
25. maj 2003 - 15:28 #5
Min sidste kode, køres under linux, kan det fremprovokere denne fejl?
Min udskriver stadig kun:
Size af parse: 42
Hej Her er morseper!

Kan det evt skyldes noget flush??
Avatar billede jakobdo Ekspert
25. maj 2003 - 15:31 #6
Åbenbart, nu ændrede jeg:
printf(msg);
til:
printf("%s\n",msg);
Og det giver ønskede resultat... Hmm...

Det er sgu nogle gange noget drilsk det C (for slet ikke at snakke om D, E og F)
Avatar billede jakobdo Ekspert
25. maj 2003 - 15:32 #7
jakobdo: Laver du lige et svar, så kan du få dine point??
Avatar billede jakobdo Ekspert
25. maj 2003 - 15:32 #8
JEP! (giv mig, giv mig...)
Avatar billede jakobdo Ekspert
25. maj 2003 - 15:48 #9
Et andet spørgsmål, som nu dukker op, når jeg kører den på "live" data, er at den fejler i denne:

int locateMsg(char *buffer, char *valstr)
{
    char start[]="\r\n\r\n";
    char slut[]="\r\n.\r\n";
    char *temp;
    char *parse = strstr(buffer, start);
    int stringSlut;
    if(parse==NULL)
      return 1;
  parse += strlen(start);
  temp = strstr(parse,slut);
  if(temp==NULL)
      return 1;
  stringSlut = temp-parse;
  parse[stringSlut+1]='\0';
  printf("Size af parse: %d\n",strlen(parse));
  strcpy(valstr,parse);
  return 0;
}

Den hopper ud ved if(temp==NULL) return 1;
Men jeg har lavet et hex dump af det data, som jeg modtager, og det indeholder:
0d 0a 0d 0a 2e 0d 0a
altså:
\r\n\r\n.\r\n

Men hvorfor fanden finder den ikke \r\n.\r\n?? :o(
Avatar billede arne_v Ekspert
25. maj 2003 - 16:18 #10
Det er et kendt problem at nogle kombinatioener af operativ-system &
compiler kræver en afsluttende \n.

Det tænkte jeg ikke lige på.
Avatar billede arne_v Ekspert
25. maj 2003 - 16:21 #11
Den sidste kan jeg forklare:

buffer = "\r\n\r\n.\r\n"

parse = strstr(buffer, "\r\n\r\n") = "\r\n\r\n.\r\n"

parse = parse + strlen(start) = ".\r\n"

temp = strstr(parse, "\r\n.\r\n") = NULL
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester