WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Erzeugung mat File über API von Matlab in Eclipse in C

 

Real_Enigneer
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 15.06.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.06.2016, 16:46     Titel: Erzeugung mat File über API von Matlab in Eclipse in C
  Antworten mit Zitat      
Hi,
versuche gerade in Eclipse in C ein mat-File zu erzeugen, bzw. zu lesen.
Dafür habe ich in Eclipse (Mars 2) unter Properties -> C/C++ Build->Settings->MinGW C Linker folgende Daten eingegeben:
Libraries: libmat,libeng,libmex,libmx
Library search path: Pfad der zu Matlab .libs führt.
Die h-Files wurden direkt in den Workspace kopiert.
Mein Problem ist jetzt, dass das Programm zwar kompiliert wird, die exe aber sofort terminiert wird.
Mein Testprogramm sieht wie Folgt aus:

/*
============================================================================
Name : test823.c
Author : xxx
Version :
Copyright : Your copyright notice
Description : Hello World in C, Ansi-style
============================================================================
*/

#include <stdio.h>
#include <stdlib.h>
#include "mat.h"
#include <string.h>

void cpystr(char* str1, char* str2);




int main() {

char *data_name={"Test.mat"};
char *dir_data={Pfad zu Datei};//for input
char *data_path={0};//for usage!
char *errormessage={0};

cpystr(data_path,dir_data); //copy path for usage
puts("Start");
strcat(data_path,data_name);
MATFile *pMat=NULL;
printf("Data:%s\n",data_path);
//pMat=matGetFp(data_path);
pMat=matOpen(data_path,"r");

if(pMat==NULL)
{
strcpy(errormessage,"Error!");

}
else
{
strcpy(errormessage,"Alel ok!");
}
printf("Result:%s ",errormessage);

return EXIT_SUCCESS;
}




void cpystr(char* str1, char* str2)
{
int counter=0;
//maybe check here how long the name is!

for(counter=0;counter<=strlen(str2);counter++)
{
str1[counter]=str2[counter];
}
}


Hat jemand von euch eine Idee? Hab ich irgendetwas vergessen?
Ich habe auch schon die .lib+.dll in .a Files umwandeln lasse, mit dem gleiche Ergebnis.
Über eine Idee würde ich mich sehr freuen.
VG
Real_Engieneer
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 18.06.2016, 13:03     Titel: Re: Erzeugung mat File über API von Matlab in Eclipse in C
  Antworten mit Zitat      
Hallo Real_Enigneer,


Code:
char *data_path={0};//for usage!

Jetzt ist data_path ein NULL-Pointer. Es wurde kein Speicherplatz für reserviert, auf den diese Variable zeigt.
Code:
%In: void cpystr(char* str1, char* str2)
   str1[counter]=str2[counter];
 

Jetzt werden Daten in den NULL-Pointer kopiert.

C ist nicht trivial, denn man kann sehr leicht irgendwohin irgendwelche Werte schreiben und das Programm und sogar den Rechner effizient damit abschießen. Der Umgang mit Strings ist eine Kunst für sich und selbstgestricke Funktionen zum Kopieren von Strings sind ein absolutes DONT! Nicht machen!!! Daran sind schon so viele Programmierer gescheitert und haben furchtbare Sicherheitslücken in Programmen hinterlassen, dass man sich da nicht anschließen sollte. Verwende für alle String-Funktionen unbedingt Methoden aus den Bibliotheken.

Die hier ist übrigens ein reines C-Problem und hat mit Matlab nur sekundär zu tun.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Real_Enigneer
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 15.06.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.06.2016, 09:07     Titel:
  Antworten mit Zitat      
Hallo Jan,
joa die Speicherreservierung wäre besser gewesen. Ändert aber nichts daran, dass der Code fehlerfrei funktioniert Wink
Und einen String über Pointern zu kopieren ist nicht immer verkehrt Wink
Das Problem ist wohl der Compiler, der von Matlab für die Libs verwendet wurde.
LG
Real_Engineer
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 21.06.2016, 17:56     Titel:
  Antworten mit Zitat      
Hallo Real_Enigneer,

"die exe aber sofort terminiert wird" klingt nicht nach "fehlerfrei funktioniert".

Zitat:
Und einen String über Pointern zu kopieren ist nicht immer verkehrt ;)

Einen String in einen NULL-Pointer zu kopieren ist ganz bestimmt falsch.

Zitat:
Das Problem ist wohl der Compiler, der von Matlab für die Libs verwendet wurde.

Das ist nicht naheliegend. Die Libraries sind hunderttausenfach getestet und die Compiler noch viel öfter.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Real_Enigneer
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 15.06.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.06.2016, 07:26     Titel:
  Antworten mit Zitat      
Jan S hat Folgendes geschrieben:
Hallo Real_Enigneer,

"die exe aber sofort terminiert wird" klingt nicht nach "fehlerfrei funktioniert".

Zitat:
Und einen String über Pointern zu kopieren ist nicht immer verkehrt Wink

Einen String in einen NULL-Pointer zu kopieren ist ganz bestimmt falsch.

Zitat:
Das Problem ist wohl der Compiler, der von Matlab für die Libs verwendet wurde.

Das ist nicht naheliegend. Die Libraries sind hunderttausenfach getestet und die Compiler noch viel öfter.

Gruß, Jan


Hallo Jan,
das Problem wurde gelöst und die exe funktioniert fehlerfrei.
Der Fehler lag nicht an dem Pointer, sondern daran, das Matlab bei der Installation eine Umgebungsvariable nicht vollständig gesetzt hatte, aus Gründen auch immer. Die exe wurde also deshalb terminiert, weil die dlls nicht gefunden wurden.
Zudem empfiehlt MathWorks selber strickt den MinGW Compiler 4.9.2 für Matlab 2015b zu verwenden. Bei Bedarf kannst Du sie gerne anschreiben.
Das Programm funktioniert ohne Probleme.
Alles weitere geht hier OT und hat nichts mit Matlab zu tun.
Grüße
Real_Engineer
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.