2015-07-12 134 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

相关问题