C在尝试运行时出现分段错误
因此,我对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]);
}
}
}
toupper
& tolower
采取表示字符,并返回表示该字符作为上限或下限的情况下(分别)一个int一个int。
你正在做的两件事情不妥:
- 你传递一个字符数组(而不是单个字符)
- 的地址,您使用的返回值(INT)因为如果它是一个字符数组
所以你得到一些垃圾出的功能,然后再送printf
到映射的内存地址(用“%s”时将它作为一个输入printf
) - >这是你的seg-fault。
那么应该如何使用toupper&tolower? –
看[这里](http://www.cplusplus.com/reference/cctype/toupper/)(一般来说,学习如何使用文档,成为google的朋友,祝你好运学习C!) – Amit
为了让生活更轻松,还可以考虑使用getopt命令。
在此可以找到一个例子:http://www.gnu.org/software/libc/manual/html_node/Example-of-Getopt.html#Example-of-Getopt
这确实解决了分段故障问题。因此,您应该已将此发布为对该问题的评论。我看到你没有这样的声望,所以请先尝试获得所需的声望。 – honk
'strupr'代替'toupper'和'strlwr'代替'tolower', – BLUEPIXY
还要考虑的情况下的argc
'strupr()'/'strlwr ()'不是C也不是POSIX,可能只能作为后者的扩展,所以不是portabe。 @BLUEPIXY – alk