0

我正在为一个 C 程序编写这段代码,该程序在调用时将字母转换为小写:

./arg lower

并在调用时将它们转换为大写:

./arg upper

这是我写的代码,请帮助我:

#include<stdio.h>
#include<ctype.h>
main(int argc,char *argv[])
{
    int i;
    char c;
    for(i=1;i<argc;++i)
    {

        if(*(argv+i)=="lower")
        {
             while((c=getchar())!=EOF)
                 {
                      c=tolower(c);
                      putchar(c);
                 }
        }
        if(*(argv+i)=="upper")
        {
            while((c=getchar())!=EOF)
                 {
                      c=toupper(c);
                      putchar(c);
                 }                    
        }
    }
    return 0;
}
4

4 回答 4

6

你不能像在 C 中那样做字符串比较,你需要使用strcmp(3).

更好的是,使用strncmp(3)并指定缓冲区的大小。

最后,对于数组访问,您可以使用argv[i]代替*(argv+i). 含义相同,但第一个版本更具可读性。

所以,你会想要这样的东西:

if (0 == strncmp(argv[i], "lower", 6)) {
    ...
}
于 2012-04-09T17:44:13.557 回答
5

您必须使用该strcmp()函数来比较字符串。

于 2012-04-09T17:44:02.893 回答
2

这样做时,*(argv+i)=="lower"您实际上是在将指针与此类 c 字符串进行比较。您需要使用strcmp来查看此类字符串的内容是否相等,在这种情况下strcmp 返回零。

于 2012-04-09T17:45:13.053 回答
1

fgetc返回一个 int,而不是一个 char。如果你截断它,这次你会没事的,但是在处理二进制数据时会遭受可怕的折磨。

于 2012-04-09T18:05:20.363 回答