# [C] ersten 5 Zeichen aus einem Char entfernen



## Midyr (27. März 2010)

Hallo,

ich habe einen Char unbekannter Länge, das mit "Exec=" beginnt.  Nun möchte ich alles, was nach "Exec=" kommt in ein anderes Array schreiben (inkl, evt. weiterer Gleichheutszeichen).

Gruß

Midyr


----------



## Crash Kid (27. März 2010)

Hi,

du könntest die wirkliche char-länge bestimmen mit strlen() und dann eine for-Schleife machen die halt erst bei 5 anfängt und solange geht bis die länge erreicht ist.


----------



## vfl_freak (27. März 2010)

Moin,



Midyr hat gesagt.:


> ich habe einen Char unbekannter Länge, das mit "Exec=" beginnt



Wieso _unbekannte _Länge 
Poste mal Deinen Code !

Gruß
Klaus


----------



## FBIagent (27. März 2010)

Ich gehe davon aus du hast so etwas in der art:


```
char *ExecStr;

// construct the string starting with "Exec="
```

Dann könntest du folgendes tun:

```
const char *ExecStrStart  = "Exec=";

size_t ExecStrLen;
char *ExecCommand;

ExecStrLen = strlen(ExecStr);
if (ExecStrLen < strlen(ExecStrStart)) ;// impossible

ExecCommand = malloc(ExecStrLen + 1);
// error handling...

strcpy(ExecCommand, ExecStr + strlen(ExecStrStart));

printf(ExecCommand);
```

Wenn du allerdings einen String hast der mehrere argumente mit Werten getrennt durch "=" hast, kommst du
nicht am analysieren und umfrangreicherem aufteilen vorbei.

EDIT:
Ich habe jetzt auch das was bei dir in den Klammern steht gelesen.
Ich gehe davon aus, dass du einen String in folgender Art meinst: "Exec=Command Blah=Blub"
Das einfachste wäre in meinen Augen die Leerzeichen zwischen den Paren durch "\0" zu ersetzen.
In etwa so:

```
size_t ExecStrLen;
size_t i;

ExecStrLen = strlen(ExecStr);

for (i = 0;i < ExecStrLen;++ i)
{
    if (ExecStr[i] == ' ') ExecStr[i] = '\0';
}
```

Nun brauchst du nur noch jedes paar durchgehen:

```
size_t PairLen;
char *Pair;
Pair = ExecStr;
ExecStr += ExecStrLength;

while (Pair < ExecStr)
{
    PairLen = strlen(PairWalker);

    // do something with the pair
    printf(Pair);

    Pair += PairLen + 1;
}
```


----------



## deepthroat (27. März 2010)

Hi.





FBIagent hat gesagt.:


> ```
> Pair = ExecStr;
> 
> while (Pair < ExecStr)
> ```


Wie sollte denn hier Pair < ExecStr sein?

Außerdem wollte Midyr doch nur den String ab dem 5 Zeichen in einen anderen Kopieren:

```
const char* exec = "Exec=bla,blue=123=irgendwas";
char ziel[200]; // oder dynamisch allozieren

strcpy(ziel, exec + 5);
```
Gruß


----------



## FBIagent (27. März 2010)

deepthroat hat gesagt.:


> Hi.
> Wie sollte denn hier Pair < ExecStr sein?


Da hast du vollkommen recht da hab ich nicht ganz nachgedacht. Braucht man natürlich die Endadresse.



deepthroat hat gesagt.:


> Außerdem wollte Midyr doch nur den String ab dem 5 Zeichen in einen anderen Kopieren:
> *c Code: *
> 
> 
> ...


Jetzt wo ich nochmal gelesen habe ist mir das erst aufgefallen  Das kommt davon wenn man alles nur
überfliegt und selbst reininterpretiert.


----------

