繁体   English   中英

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

[英]Segmentation fault in C when trying to run

因此,我是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]);
    }
  }

}

touppertolower接受一个表示字符的整数,并分别返回表示该字符的大写或小写形式的整数。

您做错了两件事:

  1. 您传入的是char数组的地址(而不是单个字符)
  2. 您正在使用返回值(int),就好像它是一个char数组一样(使用“%s”将其作为输入传递给printf

因此,您会从该函数中获取一些垃圾,然后将printf发送到未映射的内存地址->这就是您的段错误。

为了使生活更轻松,还可以考虑使用getopt命令。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM