centhron69
Grünschnabel
Programmiersprache: C
System: openBSD
Compiler: gcc
Debugger: gdb
Hi,
folgendes Problem:
Ich möchte aus einer seriellen Schnittstelle auslesen. Nun hab ich das kleine Programm in einer main geschrieben und getestet. Es hat funktioniert. Anschließend hab ich das Programm auf mehrere Dateien verteilt (main.c func.c func.h) und nun kommt bei fgets ein Segmentation Fault.
main.c
func.c
Wenn ich Zeile 14 auskommentier funktioniert das Programm
func.h
Der Debugger ist leider auch nicht hilfreich. Er schreibt:
Wobei ich strlen gar nicht benutze x__X. Kennt jemand den Fehler?
Viele Dank für die Hilfe
System: openBSD
Compiler: gcc
Debugger: gdb
Hi,
folgendes Problem:
Ich möchte aus einer seriellen Schnittstelle auslesen. Nun hab ich das kleine Programm in einer main geschrieben und getestet. Es hat funktioniert. Anschließend hab ich das Programm auf mehrere Dateien verteilt (main.c func.c func.h) und nun kommt bei fgets ein Segmentation Fault.
main.c
Code:
#include"func.h"
int main(void)
{
const char *COM_IN_NAME = "/dev/cua00"; //input COM name
const char *COM_OUT_NAME = "/dev/cua01"; //output COM name
FILE* com_in; //COM Inpu
FILE* com_out; //COM Output
char str[100]; //Read-Write String
//-------------------------------------------------------------------------------------------------
read(COM_IN_NAME, str, com_in);
return 0;
}
func.c
Code:
#include"func.h"
int read(const char *COM_IN_NAME, char *str, FILE *com_in)
{
//input filestream oeffnen
com_in = fopen(COM_IN_NAME, "r");
if(com_in == NULL)
{
printf("%s konnte nicht geoeffnet werden\n", COM_IN_NAME);
return 1;
}
//lesen bis <ENTER> oder max-groeße erreicht
fgets(str, 100, com_in);
printf("%s",str);
return 0;
}
int write(const char * COM_OUT_NAME, char *str, FILE *com_out)
{
//output filestream oeffnen
com_out = fopen(COM_OUT_NAME, "w");
if(com_out == NULL)
{
printf("%s konnte nicht geoffnet werden\n", COM_OUT_NAME);
return 1;
}
fputs(str, com_out);
return 0;
}
Wenn ich Zeile 14 auskommentier funktioniert das Programm
func.h
Code:
#include<stdio.h>
int read(const char *COM_IN_NAME, char* str, FILE* com_in);
int write(const char *COM_OUT_NAME, char* str, FILE* com_out);
Der Debugger ist leider auch nicht hilfreich. Er schreibt:
Code:
Program received singal SIGSEGV, Segmentation fault.
strlen (str=0x6 <Address 0x6 out of bounds>)
at /usr/src/lib/libc/string/strlen.c:43
/usr/src/lib/libc/string/strlen.c: no such file or directory
in /usr/src/lib/libc/string/strlen.c:
Wobei ich strlen gar nicht benutze x__X. Kennt jemand den Fehler?
Viele Dank für die Hilfe
