GOOGLE ADS

Mittwoch, 27. April 2022

Segmentierungsfehler kommt in Englisch zu Morsecode und ich weiß nicht warum

Kann mir jemand sagen warum dieser Code nicht mehr funktioniert? IT hat gestern einwandfrei funktioniert, jetzt hat es mir einen Segmentierungsfehler (Core Dump) gegeben (Dies ist nur Fülltext, weil ich nicht mehr weiß, was ich erklären soll, ich habe diesen Code vor einigen Tagen geschrieben und es hat perfekt funktioniert, aber jetzt gibt es mir eine Segmentierung Fehler Core Dump und ich kenne die Ursache dafür leider nicht, also bitte, wenn mir jemand helfen und mich anleiten könnte, damit ich diesen Fehler beheben kann, wäre ich dankbar)

#include<iostream>
using namespace std;
int Strlen(char *s1)
/*returns the length of string in number of characters...*/
{
int length=0;
while(*s1!='\0')
{
*s1++;
length++;
}
return length;
}
int main()
{
int option=0, length=0;
cout<<" \\\\WELCOME TO THE MORSE CONVERTER//"<<endl;
cout<<"Select which type of conversion you want to do:"<<endl;
cout<<"1) Sentence to Morse Code"<<endl;
cout<<"2) Morse Code to Sentence"<<endl;
cin>>option;
switch(option)
{
case 1:
char arr[1000];
char* ptr;
cout<<"Write your sentence to convert in Morse Code\n";
cin.ignore(); //USED TO REFRESH THE CIN BUFFER (WITHOUT THIS THE GETLINE FUNCTION WILL NOT TAKE INPUT)
cin.getline(ptr,1000); //TAKING SENTENCE INPUT INTO THE CHARACTER ARRAY
cout<<"Your sentence is:\n"<<ptr<<endl;

length=Strlen(ptr); //TELLS US THE LENGTH OF THE ARRAY
for(int i=0; *(arr+i)<=length; i++) //WE TAKE i<=length BECAUSE THE STRLEN FUNCTION DOESNT COUNT \0
{
if(*(arr+i)=='A'||*(arr+i)=='a')
cout<<".-";
if(*(arr+i)=='B'||*(arr+i)=='b')
cout<<"-...";
if(*(arr+i)=='C'||*(arr+i)=='c')
cout<<"-.-.";
if(*(arr+i)=='D'||*(arr+i)=='d')
cout<<"-..";
if(*(arr+i)=='E'||*(arr+i)=='e')
cout<<".";
if(*(arr+i)=='F'||*(arr+i)=='f')
cout<<"..-.";
if(*(arr+i)=='G'||*(arr+i)=='g')
cout<<"--.";
if(*(arr+i)=='H'||*(arr+i)=='h')
cout<<"....";
if(*(arr+i)=='I'||*(arr+i)=='i')
cout<<"..";
if(*(arr+i)=='J'||*(arr+i)=='j')
cout<<".---";
if(*(arr+i)=='K'||*(arr+i)=='k')
cout<<"-.-";
if(*(arr+i)=='L'||*(arr+i)=='l')
cout<<".-..";
if(*(arr+i)=='M'||*(arr+i)=='m')
cout<<"--";
if(*(arr+i)=='N'||*(arr+i)=='n')
cout<<"-.";
if(*(arr+i)=='O'||*(arr+i)=='o')
cout<<"---";
if(*(arr+i)=='P'||*(arr+i)=='p')
cout<<".--.";
if(*(arr+i)=='Q'||*(arr+i)=='q')
cout<<"--.-";
if(*(arr+i)=='R'||*(arr+i)=='r')
cout<<".-.";
if(*(arr+i)=='S'||*(arr+i)=='s')
cout<<"...";
if(*(arr+i)=='T'||*(arr+i)=='t')
cout<<"-";
if(*(arr+i)=='U'||*(arr+i)=='u')
cout<<"..-";
if(*(arr+i)=='V'||*(arr+i)=='v')
cout<<"...-";
if(*(arr+i)=='W'||*(arr+i)=='w')
cout<<".--";
if(*(arr+i)=='X'||*(arr+i)=='x')
cout<<"-..-";
if(*(arr+i)=='Y'||*(arr+i)=='y')
cout<<"-.--";
if(*(arr+i)=='Z'||*(arr+i)=='z')
cout<<"--..";
if(*(arr+i)=='0')
cout<<"-----";
if(*(arr+i)=='1')
cout<<".----";
if(*(arr+i)=='2')
cout<<"..---";
if(*(arr+i)=='3')
cout<<"...--";
if(*(arr+i)=='4')
cout<<"....-";
if(*(arr+i)=='5')
cout<<".....";
if(*(arr+i)=='6')
cout<<"-....";
if(*(arr+i)=='7')
cout<<"--...";
if(*(arr+i)=='8')
cout<<"---..";
if(*(arr+i)=='9')
cout<<"----.";
if(*(arr+i)=='.')
cout<<".-.-.-";
if(*(arr+i)==',')
cout<<"--..--";
if(*(arr+i)=='?')
cout<<"..--..";
if(*(arr+i)=='\'')
cout<<".---.";
if(*(arr+i)=='!')
cout<<"-.-.--";
if(*(arr+i)=='/')
cout<<"-.--.";
if(*(arr+i)=='(')
cout<<"-.--.";
if(*(arr+i)==')')
cout<<"-.--.-";
if(*(arr+i)=='&')
cout<<".-...";
/*if(*(arr+i)!='A'||*(arr+i)!='a'||*(arr+i)!='B'||*(arr+i)!='b'||*(arr+i)!='C'||*(arr+i)!='c'||*(arr+i)!='D'||*(arr+i)!='d'||*(arr+i)!='E'||*(arr+i)!='e'||*(arr+i)!='F'||*(arr+i)!='f'||*(arr+i)!='G'||*(arr+i)!='g'||*(arr+i)!='H'||*(arr+i)!='h'||*(arr+i)!='I'||*(arr+i)!='i'||*(arr+i)!='J'||*(arr+i)!='j'||*(arr+i)!='K'||*(arr+i)!='k'||*(arr+i)!='L'||*(arr+i)!='l'||*(arr+i)!='M'||*(arr+i)!='m'||*(arr+i)!='N'||*(arr+i)!='n'||*(arr+i)!='O'||*(arr+i)!='o'||*(arr+i)!='P'||*(arr+i)!='p'||*(arr+i)!='Q'||*(arr+i)!='q'||*(arr+i)!='R'||*(arr+i)!='S'||*(arr+i)!='s'||*(arr+i)!='T'||*(arr+i)!='t'||*(arr+i)!='U'||*(arr+i)!='u'||*(arr+i)!='V'||*(arr+i)!='v'||*(arr+i)!='W'||*(arr+i)!='w'||*(arr+i)!='X'||*(arr+i)!='x'||*(arr+i)!='Y'||*(arr+i)!='y'||*(arr+i)!='Z'||*(arr+i)!='z'||*(arr+i)!='0'||*(arr+i)!='1'||*(arr+i)!='2'||*(arr+i)!='3'||*(arr+i)!='4'||*(arr+i)!='5'||*(arr+i)!='6'||*(arr+i)!='7'||*(arr+i)!='8'||*(arr+i)!='9'||*(arr+i)!='.'||*(arr+i)!=','||*(arr+i)!='?'||*(arr+i)!='\''||*(arr+i)!='!'||*(arr+i)!='/'||*(arr+i)!='('||*(arr+i)!=')'||*(arr+i)!='&')
cout<<" ";
*/
if(arr[i] == ' ')
cout<<" ";
}
break;
}
}


Lösung des Problems

Ein Ausdruck in einer Bedingung in Ihrer Schleife

for(int i=0; *(arr+i)<=length; i++) //WE TAKE i<=length BECAUSE THE STRLEN FUNCTION DOESNT COUNT \0

*(arr+i)bedeutet einen Wert des Arrays arrbei offset i, oder einfach arr[i]das ist einfacher für die Augen.

Warum arr[i]muss also kleiner oder gleich sein length?

Auch Ihr Kommentar zu dieser Zeile macht keinen Sinn. Obwohl das Ende 0nicht gezählt wird, müssen Sie es nicht in Morsezeichen umwandeln. Tatsächlich gibt es keine Codierung für \0. Die Bedingung sollte also sein < length.

Oh, und Sie müssen keine Funktion erfinden, um die Länge der Zeichenfolge zu erhalten, es gibt einige davon.

Andererseits müssen Sie nicht einmal die Länge Ihrer Saite kennen, gehen Sie einfach, bis Sie das sehen \0.

Keine Kommentare:

Kommentar veröffentlichen

Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...