Pointer in C (pic 24F)

Gast #1085560
Lesenswert?

Hallo

Seit längerem programmiere ich nun in C, habe aber noch nie mit Pointern 
gearbeitet. Ich bin nun bei einem Problem angelangt, bei welchem Pointer 
notwendig sind. Ich habe nach Pointern gegoogelt, jedoch nicht zu einer 
funktionierenden Lösung gekommen.

Nun zu meinem Problem:

Ich übergebe einer Funktion 3 Werte und einen String.
Diese Funktion schreibt einige Konstanten am Anfang (ab pos 1) eines 
Arrays mit festgelegter grösse. Dannach werden die drei übergeben 
Variabeln, und den übergebenen string (ohne das letze Zeichen) in das 
Array geschrieben. An letzer gebrauchter Stelle wird 0x00 in deas Array 
geschrieben. An Erster Stelle (pos 0) steht die letzte benuzte Stelle 
des Arrays.

Nun zu meinem Programm welches noch einige Fehler hat:

int8 lcd_data[65];

void lcd_printf(int8 x,int8 y,int8 p,int8 *string[])
  {
  int8 copy=6;
  lcd_data[1]=0x1B;
  lcd_data[2]='Z';
  lcd_data[3]=p;
  lcd_data[4]=x;
  lcd_data[5]=y;
  for(;*string!='';string++)
    {
    lcd_data[copy]=*string;
    copy++;
    }
  lcd_data[copy]=0;
  lcd_data[0]=copy;
  lcd_send();
  }

void main(void)
        {
  lcd_printf(15,13,'C',*"hallo");
        while(1);
        }

Nun ein Zahlen Beispiel was nach diesem Aufruf im Array stehen sollte, 
was aber nicht der fall ist:
lcd_data={11,0x1B,'Z','C',15,13,'h','a','l','l','o',0}


Danke für Ihre Hilfe
#1085566
Lesenswert?

Luck'n lol wrote:

> void lcd_printf(int8 x,int8 y,int8 p,int8 *string[])

Als Parameterdeklaration ist *string[] identisch mit **string und wohl 
nicht das was du erreichen willst. Und was dir zudem eine Fehlermeldung 
einbringen sollte.

Besser:
  void lcd_printf(int8 x,int8 y,int8 p,int8 string[])

> lcd_printf(15,13,'C',*"hallo");

wiederum ist eine etwas merkwürdige Form von
  lcd_printf(15,13,'C','h');
was den Compiler ebenfalls irritieren müsste. Besser:
  lcd_printf(15,13,'C',"hallo");

Wenn dir Pointer derart zusetzen: Das geht alles auch mit Array-Index 
statt Pointer.
Gast #1085589
Lesenswert?

1. Danke für deine schnelle antwort

2. Habe diesbezüglich schon einiges mit dem try and error verfahren 
probiert. Den Funktionskopf habe ich korigiert, jedoch wenn ich den 
poiter beim aufruf entferne, gibt es folgenden Fehler beim compilieren:
Attempt to create a pointer to a constant
#1085593
Lesenswert?

Kann sein, dass der Compiler aus "hallo" ein Array mit "const" Attribut 
macht, obwohl das in C aus Kompatibilität mit Milliarden von 
existierenden Quellcodezeilen eigentlich nicht so gängig ist. Evtl. 
Compiler-Option.

Dann Parameter als
  , const int8 string[])
deklarieren.
Gast #1085654
Lesenswert?

Nun das mit const behab den Fehler nicht. Versuche es nun mal lieber mit 
einem Array.

Hier jedoch weis ich nicht genau wie die übergabe funktioniert.
Stimmt es, das ich im Funktionskopf

void lcd_printf(...,int8 string[58])

schreiben muss?

Kann ich diekt den string im Aufruf eingeben, oder muss ich zuerst ein 
array erstellen?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren