Forum: Mikrocontroller und Digitale Elektronik Variablenübergabe in C


von Jochen (Gast)


Lesenswert?

Hallo,

ich habe gerade begonnen, von einem Basic Dialekt auf C (Arduino) 
umzusteigen, strauchle aber massiv an den Grundlagen. Ja, ich werde mich 
einarbeiten, wollte aber eine kleine Funktion jetzt schon einbauen. 
Leider scheitere ich kläglich an der fundamentalen Übergabe; und zwar 
sieht das so aus

Es wird definiert
1
const char* ssid = "MeinNetz"

und soll in diese Funktion übergeben werden
1
static void sendStrXY( char *string, int X, int Y)

Wie muss ich den text aus ssid richtig übergeben bzw. formatieren, damit 
er akzeptiert wird?


Danke vorab!

von Peter II (Gast)


Lesenswert?

1
sendStrXY( ssid , 1, 42 );

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

... und dann meldet der Compiler: "ssid ist losing const qualifier".

von Peter II (Gast)


Lesenswert?

Andreas S. schrieb:
> ... und dann meldet der Compiler: "ssid ist losing const qualifier".

dann muss halt noch die Funktion angepasst werden.
1
static void sendStrXY( const char *string, int X, int Y)

wobei das doch gar kein c mehr ist oder?

von Jochen (Gast)


Lesenswert?

Na, das wäre zu einfach:
1
invalid conversion from 'const char*' to 'char*' [-fpermissive]
das ist die Fehlermeldung (streng nach try-and-error war das mein erster 
Versuch)

von Mark B. (markbrandis)


Lesenswert?

Wenn die Funktion eine nicht-konstante Zeichenkette erwartet, und die 
Funktion so richtig ist, dann stimmt eben die Deklaration des Strings 
nicht.

Mit
1
char* ssid = "MeinNetz";

sollte es gehen (nicht getestet).

von Der Andere (Gast)


Lesenswert?

Jochen schrieb:
> const char*

Mach mal zwischen char und * ein Blank!

Du hast irgendwo noch einen Funktionsprototyp, den musst du auch auf 
"const char *" anpassen

von Der Andere (Gast)


Lesenswert?

Zum Format bei Pointer Definitionen siehe z.B. hier:
https://en.wikipedia.org/wiki/C_data_types

von MaWin (Gast)


Lesenswert?

Der Andere schrieb:
> Mach mal zwischen char und * ein Blank!

Wozu ?

von Jochen (Gast)


Lesenswert?

@Mark: ja geht

@Der Andere: was bitte ist ein Funktionsprototyp ....



Problem ist wohl die Definition als Konstante. Habe damit einen 
Workaround, frage mich aber was die ein oder andere Deklaration für 
Vor/Nachteile hat (natürlich nicht gleichzeitig)??
1
const char * ssid = "MyNetz1";
2
char* ssid = "MyNetz2";

von Ralf G. (ralg)


Lesenswert?

Jochen schrieb:
> ... strauchle aber massiv an den Grundlagen.

Jochen schrieb:
> streng nach try-and-error ...

Der Andere schrieb:
> Du hast irgendwo noch ...

Der Andere schrieb:
> ... Pointer Definitionen siehe z.B. hier:

Jochen schrieb:
> was bitte ist ein Funktionsprototyp ....

Wäre nicht langsam mal der Hinweis auf ein C-Buch fällig?

von Clemens L. (c_l)


Lesenswert?

Jochen schrieb:
> char* ssid = "MyNetz2";

Das deklariert einen Zeiger auf nicht-konstante Daten, aber "..." ist 
trotzdem konstant. (Dies wird nur für Kompatibilität mit altem C-Code 
erlaubt.)

Einen nicht-konstanten String erhält man mit:
1
char ssid[] = "MyNetz2";

von Pit (Gast)


Lesenswert?

Peter II schrieb:
> sendStrXY( ssid , 1, 42 );

Jochen schrieb:
> Na, das wäre zu einfach:invalid conversion from 'const char*' to 'char*'
> [-fpermissive]
> das ist die Fehlermeldung (streng nach try-and-error war das mein erster
> Versuch)

Dann mach halt nen char* draus:
sendStrXY( (char *)ssid , 1, 42 );

Gruß Pit

von Mark B. (markbrandis)


Lesenswert?

Pit schrieb:
> Dann mach halt nen char* draus:
> sendStrXY( (char *)ssid , 1, 42 );

Es besteht keine Notwendigkeit für einen Cast, wenn man die Daten so 
deklariert, dass sie zu der verarbeitenden Funktion passen.

von Sebastian V. (sebi_s)


Lesenswert?

Peter II schrieb:
> Andreas S. schrieb:
>> ... und dann meldet der Compiler: "ssid ist losing const qualifier".
>
> dann muss halt noch die Funktion angepasst werden.
> static void sendStrXY( const char *string, int X, int Y)
>
> wobei das doch gar kein c mehr ist oder?

Doch das ist immer noch C und wenn die Funktion den string nicht 
verändert (was zumindest der Name nahe legt), dann ist es genau das was 
du machen solltest.

von Der Andere (Gast)


Lesenswert?

MaWin schrieb:
> Der Andere schrieb:
>> Mach mal zwischen char und * ein Blank!
>
> Wozu ?

Es gibt durchaus "common sense" auch bei Schreibweisen in C
Das natürlich ein MaWin wieder schlauer ist als der Rest der Welt ist 
aber klar.
Mein Tipp an dich MaWin, spare die auch die Zeilenumbrüche, du bist ja 
eh der Verfechter von "Geiz ist Geil"
:-)

von Der Andere (Gast)


Lesenswert?

Jochen schrieb:
> @Der Andere: was bitte ist ein Funktionsprototyp ....

Genau jetzt IST der Hinweis fällig: bevor du alle anderen mit Code 
Kopierereien die dann nicht funktionieren nervst:
Programmieren heisst nicht Code aus dem Internet zusammenzustückeln, 
sondern vorher zu LERNEN wie die Sprache funktioniert.

von Observer (Gast)


Lesenswert?

Das wird jetzt aber unfreundlich hier!

Jochen schrieb:
> Ja, ich werde mich
> einarbeiten, wollte aber eine kleine Funktion jetzt schon einbauen.

von R. W. (Gast)


Lesenswert?

Ralf G. schrieb:

> Wäre nicht langsam mal der Hinweis auf ein C-Buch fällig?

http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/

;-)

von .. (Gast)


Lesenswert?

Jochen schrieb:
> Hallo,
>
> Es wird definiert
>
1
> const char* ssid = "MeinNetz"
2
>

eine constante, die nicht änderbar ist

>
> und soll in diese Funktion übergeben werden
>
1
> static void sendStrXY( char *string, int X, int Y)
2
>

die keine constante erwartet, sondern ein char *string
noch dazu zwei integer werte für x und y
wohl eine funktion, die ein lcd oder display oder anderes
show medium ansteuert, die übergebenen zeichen zu platzieren.

>
> Wie muss ich den text aus ssid richtig übergeben bzw. formatieren, damit
> er akzeptiert wird?

die const ändern zu einer einfachen
oder die einfache in der funktion zu einer const
wobei du x und y noch beachten solltest..

von Der Andere (Gast)


Lesenswert?

Observer schrieb:
> Das wird jetzt aber unfreundlich hier!
>
> Jochen schrieb:
>> Ja, ich werde mich
>> einarbeiten, wollte aber eine kleine Funktion jetzt schon einbauen.

Und warum hilfst du dann nicht?
Alle Hinweise wurden gegeben, aber es macht keinen Sinn wenn er 
keinerlei Grundlagen versteht.
Du kannst auch einem Chinesen hier lange auf Deutsch erklären welchen 
Weg er nehmen muss, er wird dich nicht verstehen wenn er kein Deutsch 
kann.

von Observer (Gast)


Lesenswert?

Naja, man muss nicht überall seinen Senf dazugeben... Belassen wir es 
dabei, dass er immerhin willens ist was zu lernen - auch wenn 
copy'n'paste nicht der beste Weg ist.

Ich beklage hier nur den deutlich ruppigen Ton - Netiquette und so...

duck und weg........

von Der Andere (Gast)


Lesenswert?

Observer schrieb:
> Ich beklage hier nur den deutlich ruppigen Ton

Besser ruppig aber zum Thema, als jammern und nichts zur Sache.
Meine Meinung!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.