0
Da ich weiß, dass Segmentierungsfehler auftritt, wenn wir auf einen Speicherort zugreifen, der nicht vom Betriebssystem zugewiesen wird, was verursacht hier das gleiche?Warum zeigt der Code einen Segmentierungsfehler?
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<sys/socket.h>
#include<unistd.h>
#include<netinet/in.h>
#include<arpa/inet.h>
int main(int argc,char* argv[])
{
if(argc<3 || argc>4)
{
//diewithusermsg("Parameters","<Server_Address> <Echo_String> <Port_number>");
}
const char* servip = argv[1];
char* echostring = argv[2];
in_port_t servport = (argc==4)?atoi(argv[3]):7;
int sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(sock<0)
{
//diewithsysmsg("socket() failed");
}
struct sockaddr_in servaddr;
memset(&servaddr,0,sizeof(servaddr));
servaddr.sin_family=AF_INET;
int rtnval = inet_pton(AF_INET,servip,&servaddr.sin_addr.s_addr);
return 0;
}
bei servip Parameter von inet_pton
Willkommen bei Stack-Überlauf! Es klingt, als müssten Sie lernen, wie Sie einen Debugger verwenden, um durch Ihren Code zu gehen. Mit einem guten Debugger können Sie Ihr Programm Zeile für Zeile ausführen und sehen, wo es von dem, was Sie erwarten, abweicht. Dies ist ein essentielles Werkzeug, wenn Sie programmieren wollen. Weiterführende Literatur: [Wie kleine Programme zu debuggen] (http://ericlippert.com/2014/03/05/how-to-debug-small-programs/). –
Ich weiß, es ist abweichend bei inet_pton –
Sicher - so ist der nächste Schritt, Ihren Debugger zu verwenden, um die Parameter zu überprüfen, die Sie an die Funktion übergeben. –