尝试运行时C中的分段错误

时间:2015-07-12 19:45:19

标签: c segmentation-fault

所以我是C语言的新手,我试图通过输入-u或-l来编写一个以大写或小写输出文本的程序。程序编译,但是当我运行它时,它会给我一个分段错误。为什么呢?

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

}

2 个答案:

答案 0 :(得分:2)

toupper&amp; tolower获取一个表示字符的int,并返回一个表示该字符的int(分别为大写或小写)。

你做错了两件事:

  1. 您正在传递char数组的地址(不是单个字符)
  2. 您正在使用返回的值(int),就好像它是一个char数组(将其作为输入传递给printf并使用&#34;%s&#34;)
  3. 因此,您从该功能中获取了一些垃圾,然后将printf发送到未映射的内存地址 - &gt;那是你的错误。

答案 1 :(得分:0)

为了简化生活,还可以考虑使用getopt命令。

您将在此处找到一个示例:http://www.gnu.org/software/libc/manual/html_node/Example-of-Getopt.html#Example-of-Getopt