2017-06-28 4 views
0

Ich versuche, unter Programm in einem Online-C-Compiler zu laufen. Aber ich bekomme einen Segmentierungsfehler. Können Sie mir helfen, diese zu behebenSegmentierungsfehler (Core Dumped) Fehler für C-Programm

#include <stdio.h> 
#include <string.h> 

int main() 
{ 
    char string[15] = "Strlwr in C"; 
    printf("%s",tolower(string)); 
    return 0; 
} 
+3

lesen http://www.cplusplus.com/reference/cctype/tolower/ sie einen einzigen int als Parameter übernimmt, nicht verkohlen und nicht-Array. Sie möchten wahrscheinlich eine Schleife auf "string" verwenden, die jede der Reihe nach verarbeitet. – Yunnosch

+0

'tolower()' gibt ein 'int' zurück und akzeptiert ein einzelnes' char', kein Array von 'char's. – CinCout

+1

Kompilieren Sie alle Warnungen aktiviert und behandeln Sie die Warnungen als Fehler. –

Antwort

2

Sie verwenden tolower falsch. Diese Funktion gibt int zurück und erhält int als Parameter (hier ist die Deklaration: int tolower(int c);). Was Sie wollen, ist es telefoniere auf jeder char Ihrer char array und drucken jedes:

char string[15] = "Strlwr in C"; 
    for(int i = 0; i < strlen(string); i++) 
     printf("%c",tolower(string[i])); 
5

Nach ist der Prototyp tolower

int tolower(int c); 

Sie sollten eine int oder so etwas wie char passieren, die zu int sicher umwandeln kann. Passing char * (Art von string) wie Sie führt zu UB.

Um eine Zeichenfolge in Kleinbuchstaben zu konvertieren, müssen Sie jedes Zeichen einzeln konvertieren. Eine Möglichkeit dazu ist:

char string[15] = "Strlwr in C"; 
char lstr[15]; 
int i = 0; 
do { 
    lstr[i] = tolower(string[i]); 
} while(lstr[i] != '\0'); 
printf("%s", lstr); 
1

lesen cplusplus.com/reference/cctype/tolower sie einen einzigen int als Parameter übernimmt, nicht verkohlen und nicht Array .
Sie möchten wahrscheinlich eine Schleife auf "Zeichenfolge" verwenden, die jede der Reihe nach verarbeitet.

#include <stdio.h> 
#include <string.h> 
#include <ctype.h> 

int main(void) 
{ 
    int i; 
    char string[15] = "Strlwr in C"; 
    for (i=0; i< sizeof(string)/sizeof(char); i++) 
    { 
     string[i]=(char)(tolower((int)string[i])); 
    } 

    printf("%s\n",string); 
    return 0; 
} 

Ausgang:

strlwr in c 
+0

Vielen Dank an alle für Ihre Antwort. Verstanden das Problem jetzt klar :-) – Karthik

Verwandte Themen