2017-06-28 98 views
0

我想在聯機C編譯器中的程序下運行。但我得到分割錯誤。你能幫我解決這個C程序的分段錯誤(核心轉儲)錯誤

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

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

讀http://www.cplusplus.com/reference/cctype/tolower/它需要一個單個int作爲參數,不炭和未數組。你可能想要在「字符串」上使用一個循環,它依次處理每個循環。 – Yunnosch

+0

'tolower()'返回一個'int',並接受一個'char',而不是一個'char'數組。 – CinCout

+1

編譯啓用所有警告並將警告視爲錯誤。 –

回答

2

您錯誤地使用了tolower。該函數返回int並獲取int作爲參數(這裏是聲明:int tolower(int c);)。你想要做的是把它在你的char array的每個char,並打印出每個之一:

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

以下是tolower

int tolower(int c); 

原型你應該傳遞一個int或類似char它可以安全地轉換爲int。通過char *(類型string)像你一樣導致UB。

要將字符串轉換爲小寫字符,需要分別轉換每個字符。一種方法是:

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

讀cplusplus.com/reference/cctype/tolower它採用單個int爲參數,不焦不陣列。
你可能想要在「string」上使用一個循環,它依次處理每個循環。

#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; 
} 

輸出:

strlwr in c 
+0

非常感謝所有人的迴應。現在明白了這個問題:-) – Karthik