2015-07-12 165 views
1

因此,我對C語言很陌生,我試圖編寫一個程序,輸出大寫或小寫的文本,方法是輸入-u或-l。該程序編譯,但是當我運行它時,它給我一個分段錯誤。爲什麼?C在嘗試運行時出現分段錯誤

#include <stdio.h> 
#include <string.h> 
int main(int argc, char*argv[]){ 
    int i; 
    int j; 
    int k; 
    if(strcmp(argv[1],"-u")){ 
    for(i=0;i<argc;i++){ 
     printf("%s ",toupper(argv[i])); 
     } 

    } 
    else if(strcmp(argv[1],"-l")){ 
    for(j=0;j<argc;j++){ 
     printf("%s ",tolower(argv[j])); 
    } 
    } 
    else{ 
    for(k=0;k<argc;k++){ 
     printf("%s ",argv[k]); 
    } 
    } 

} 
+0

'strupr'代替'toupper'和'strlwr'代替'tolower', – BLUEPIXY

+0

還要考慮的情況下的argc <2 –

+0

'strupr()'/'strlwr ()'不是C也不是POSIX,可能只能作爲後者的擴展,所以不是portabe。 @BLUEPIXY – alk

回答

2

toupper & tolower採取表示字符,並返回表示該字符作爲上限或下限的情況下(分別)一個int一個int。

你正在做的兩件事情不妥:

  1. 你傳遞一個字符數組(而不是單個字符)
  2. 的地址,您使用的返回值(INT)因爲如果它是一個字符數組

所以你得到一些垃圾出的功能,然後再送printf到映射的內存地址(用「%s」時將它作爲一個輸入printf) - >這是你的seg-fault。

+0

那麼應該如何使用toupper&tolower? –

+1

看[這裏](http://www.cplusplus.com/reference/cctype/toupper/)(一般來說,學習如何使用文檔,成爲google的朋友,祝你好運學習C!) – Amit

相關問題