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 arr
bei 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 0
nicht 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