首页 > 解决方案 > 数组初始化拼写

问题描述

我编写了一个将数组中的任何字母转换为小写的函数,但我希望该功能位于主函数中,而不使用我编写的函数。不知何故我做不到或不承认我的错误:

这是我的功能:

    void lower(char *a) {

        for (int n = 0; n < strlen(a); n++) {
            a[n] = tolower(a[n]);
         }
     }

和我的主要功能:

int main(int argc, char ** argv) {


if (strcmp(*(argv + 0), "./lower") == 0)  
    {
        for (int i = 1; i < argc; i++)     
        {
            
            for (int n = 0; n < strlen(argv[i]); n++) // <- this is my problem
            {
                **(argv+n) = tolower(**(argv+n));
            }
        }

     
        return 2;
    }

  return 0;
}

我想在没有函数的if语句中这样做,但不知道问题出在哪里。当我使用我的功能时它可以工作。

标签: arrayscpointers

解决方案


使其更易于阅读,而不是双指针使用单指针。它会使指针算术更简单(**(argv+n)不是你想要的)。

        for (int i = 1; i < argc; i++)
        {
            char *temp = argv[i];
            while(*temp)
            {
                *temp = tolower((unsigned char)*temp);
                temp++;
            }
        }

推荐阅读