problem windows vs. linux allgemein Fragen
-
Hi,
hab ein programm unter Windows mit Dev-C++ geschrieben jetzt wollte ich das ganze unter linux compilieren und bekomme dabei erst mal massig warnungen was nicht weiter schlimm ist. Was aber ärgerlich ist das mir folgende Fehler angezeigt werden mit denen ich nichts anfangen kann hoffe mir kann jemand helfen.
Hier die erste Fehlermeldung:
undefined reference to `sqrt'long int primzahl() { // Variablendefinition - belegung long int a; //Hier wird die wahrscheinliche Primzahl gespeichert int i; //Zaehlvariable int flag; //einfache entscheidungs - variable // Voreinstellung fuer das ermitteln der Zuffalszahl srand(time(0)); // Ermitteln der Primzahl beginnt mit abarbeitung der Schleife do { // entscheidungsvariable zuruecksetzten flag = 0; // Zufallszahl ermitteln a =rand()%400+1; // prüfen ob es eine Primzahl ist if (a % 2 == 0) { flag = 1; } // Versuche variable a mit den ungeraden Zahlen von 3 bis sqrt(a) zu teilen! for (i = 3; i <= sqrt(a); i = i + 2) { // Hier soll der Fehler sein if (a% i == 0) { //Teilertest flag = 1; } } // Wenn es hier rausgeht dann ist a eine Primzahl }while (flag == 1); // Rueckgabe der Primzahl return a; }
Hier die zweite Fehlermeldung:
undefined reference to `pow'int bintochar(char c[]) { // Variablendeffinition -belegung int i; int ret = 0; // Uwandeln mit Zaehlschleife for (i=0;i<KEYLAENGEMERKLE;i++){ if (c[i]=='1'){ ret += (int)pow(2, (KEYLAENGEMERKLE - i - 1)); // Hier ist der Fehler } } return ret; }
An den Headerdatein kann es eigentlich nicht liegen da ich folgende eingebunden habe:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include <limits.h>
-
Mit dem Compiler 'gcc' musst du in C ein '-lm' anhängen, um die Mathe-Sachen zu linken.
-
ok probier ich dann mal gleich aus hätte aber noch eine frage zu einer warnung die ich bekomme die warnung lautet:
warning: format ‘%[^die dazugehörige code zeile lautet:
scanf("%254[^\n]", &pfad);
-
Was ist
pfad
und was ist die vollständige Warnung? Fallspfad
irgendeine Form von char-Array ist, dann gehört da kein & hin und der Compiler wird vermutlich warnen, dass er char* erwartet, aber *char[irgendwas] bekommen hat.
-
Angenommen, Du arbeitest mit einem char-Array:
char array[100];
Der Ausdruck array ist dann äquivalent zu &array[0] und steht für die Adresse des Char-Arrays. Insofern brauchst Du keinen Adress-Operator davor für scanf, weder in Windows noch in Linux.
-
PrettyY schrieb:
Der Ausdruck array ist dann äquivalent zu &array[0]
Ja.
und steht für die Adresse des Char-Arrays.
Eben nicht. Die Adresse des ersten Elementes ist vom Typ Zeiger auf char, die Adresse des Arrays (also &array) ist vom Typ Zeiger auf char-Array. Der Zahlenwert des Pointers wird in beiden Fällen der gleiche sein (ich bin mir sogar ziemlich sicher, dass der Standard dies garantiert, müsste ich aber gucken), der Compiler sieht aber den Unterschied zwischen den Typen, wenn er hier die Syntax von scanf kontrolliert.
-
char array[100];
array[0] steht für den ersten char im Array "array" und &array[0] steht für die Adresse des Pointers auf den ersten char im Array "array".
Zerstör nicht mein mühsam aufgebautes Halbwissen!
Sicherlich sind &array und array nicht identisch, zumindest nicht typgleich. Aber ich sprach auch von array und &array**[0]**Ich hab mich natürlich nicht korrekt ausgedrückt, aber ich bin ziemlich sicher, wir meinen das Gleiche
-
Doch, du hast recht, array und &array[0] sind (zumindest in vielen Kontexten) identisch. Aber es sind (vom Typ her) Zeiger auf das erste Element, nicht Zeiger auf das Array, wie du behauptet hattest.
-
Dann sind wir uns zumindest einig
Danke für die Aufklärung