2016-04-15 15 views
1

Lassen Sie sich sagen, ich habe: -C-Programmierung: String-Manipulation

char Data[1000]; 

Nach einiger Datenextraktion und Manipulation zu tun, übergeben Sie um in Hilfsfunktionen (wie char * Data), ich tue dem folgend ein führendes ',' zu entfernen aus den Daten: -

if (Data[0] == ',') Data++; 

Und das funktioniert wie ein Charme.

aber als ich meinen Code auf aufbaute, begann ich struct, daß anstelle einzelner Variablen. So, jetzt

Ich habe dies: -

struct BigData 
{ 
    char Data[1000]; 
} 

ich manipulieren, um sie nach wie vor und geben es an und alles funktioniert gut, bis ich versuche, das führt zu entfernen ‚‘. Meine oben Methodik nicht funktioniert wie folgt: -

if (_bigData.Data[0] == ',') _bigData.Data++; 

aus offensichtlichen Gründen. Also habe ich beschlossen, einen temporären char Array zu erstellen, wie folgt: -

char temp[1000]; 
strcpy(temp, _bigData.Data); 
if(temp[0] == ',') temp++; 

Kann jemand mir erklären, warum dies nicht funktioniert?

ich gerade jetzt zu Beginn Code bin in C (aus C#, wo solche Stringmanipulationen ein sehr Oberflächenniveau Verfahren sind).

+1

Sie vergleichen sollten '==' 'temp [0]' und '',' 'zu vergleichen. '=' ist der Zuweisungsoperator. Gibt Ihnen das die Ergebnisse, die Sie erwarten? –

+6

'Daten ++;'? Das sollte nicht kompiliert werden, da 'Data' ein Array-Name ist. –

+0

Entschuldigung, das war ein Tippfehler meinerseits, ich habe gerade Pseudocode geschrieben ...Nun, das kompiliert und gibt mir das gewünschte Ergebnis. Hier ist, was ich gefunden habe: - http://StackOverflow.com/Questions/4295754/How-to-remove-first-character-from-c-string – Philo

Antwort

3

einen Zeiger inkrementieren ist OK. Data ist ein Zeiger.

// After doing some data extraction and manipulation, 
// passing it around into helper functions (as char * Data), 
// I am doing the following to remove a leading ',' from the data:- 
void helper_function(char *Data) { 
    if (Data[0] == ',') Data++; 
    ... 

Inkrementieren einer Array ist nicht legal C Syntax. temp[] ist ein Array.

char temp[1000]; 
... 
if(temp[0] == ',') temp++; // error 

Vielleicht OP könnte das Array einen Zeiger zuzuweisen und dann erhöhe den Zeiger zu Code des Ziels zu entsprechen.

char temp[1000]; 
char *p = temp; 
... 
if(p[0] == ',') p++; // OK 

..., ein Ausdruck, der ‚‘ Array vom Typ ‚hat Typ‘ ist auf einen Ausdruck mit Typ ‚‘ Zeiger auf Typ ‚‘ umgewandelt, die von dem Array-Objekt zum Ausgangselement verweist. .. C11dr §6.3.2.1 3

+0

Ja, obwohl ich '* ptr = & arr [0]' in dieser Situation immer bevorzuge/empfehle es ist völlig klar darüber, was es tut, kein Grund, es für ein paar Sekunden zu schielen :) –

-3

Declare temp wie folgt aus:

char *temp[1000] 

dann versuchen, diese:

int index = 0; 
while(temp[index] != '\0')   //check if temp[index] is still valid 
{ 
    if (temp[index] == ',') 
    { 
     index++; 
    } 
    else 
     break; 
} 
+0

Ich denke nicht, dass es Index ++ sein sollte .... warum Index ++? – Philo

+0

... weil viele Leute, ohne ersichtlichen Grund, standardmäßig Postfix-Operatoren verwenden, auch wenn sie den Wert vor dem Operator nicht benötigen? Aber wie auch immer - "else break" lolwut, dies macht den Zweck der Verwendung einer Schleife ungültig. Außerdem deklarierst du eine Reihe von Zeigern, keine Zeichen ... oh, mein Fehler, 'chat's, was auch immer das sind ... @Philo, das Postfix ist das kleinste der Probleme hier! –

+0

sicher verstehe ich. Das war nicht sehr gut geschrieben. Ich nehme an, ich könnte einfach mitmachen ... aber ich dachte, der andere wäre irgendwie glatt. – Philo