不兼容的指针类型功能

时间:2017-04-24 18:11:16

标签: c pointers

我正在努力学习C来培养我的编程技巧,我正在尝试制作一个算法,可以将大写字母改为小写字母,将小写字母改为大写字母。在简单算法中,我编写了这段代码,但是出错了发生在它上面,我的问题是编译器说“操作数类型是不兼容的”。这是什么意思?我把我的长度称为指针函数,在地址中存储一个内存以输入控制台随机字符。中出现错误我小于循环部分的长度。我期待从你的回复中学到新东西。“int”和“int(*)char * s”)它说 < / p>

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <conio.h>

int length(char *s)
{
    int i = 0;
    int counter = 0;
    while (s[i] != NULL)
    {
        i++;
        counter++;
    }
    return counter;
}

void upperlower(char *s)
{
    int i;
    for (i = 0; i<length; i++)
    {
        if (s[i] >= 65 && s[i] <= 90)
            s[i] += 32;
        else if (s[i] >= 97 && s[i] <= 122)
            s[i] -= 32;
    }
}

int main()
{
    printf("Please write down the character string: ");
    scanf("%s", upperlower);
    printf("The character string is %s", upperlower);
    getch();
    return 0;
}

4 个答案:

答案 0 :(得分:2)

您似乎对如何调用函数感到困惑。

执行此操作时:

for (i = 0; i<length; i++)

您没有调用length函数。您正在表达式中使用函数的名称,因此您所拥有的是函数指针。您需要添加函数调用操作数()以及要传入的参数:

for (i = 0; i<length(s); i++)

同样在main函数中,您实际上并未调用upperlower。此外,您永远不会定义字符数组来接收您想要读取的字符串。将该数组包含为局部变量,将其传递给scanf以从用户获取字符串,然后将其传递给函数。

char str[50];
printf("Please write down the character string: ");
scanf("%49s", str);
upperlower(str);
printf("The character string is %s", str);

答案 1 :(得分:1)

scanf("%s", upperlower);需要void*类型(在这种情况下为char*)并且您提供的函数指针void (*)(char*)无法转换为void*因此错误。

如果你正在学习,C语言并不是最简单的语言,特别是从指针开始。考虑内存布局,它将开始变得更有意义。

答案 2 :(得分:0)

for函数的upperlower循环中,您进行比较以进行比较i<lengthiint变量,length是您之前声明的函数。

当你在这里引用时,它指向指向函数本身的指针,它不提供函数的结果。

相反,请尝试将i<length更改为i<length(s),这样,length会返回可与int进行比较的结果。

scanf函数中的main也可以这样说。在这里,您应该声明一个数组来存储字符串,然后将其传递给函数:`

char str[32];
scanf("%s", str);
upperlower(str)
printf("The character string is %s", str);
getch();

答案 3 :(得分:0)

你在代码中犯了一些错误,如:

  • 将字符与空指针s[i] != NULL进行比较,也许你的意思是\ 0
  • 在第33行传递函数名而不是字符串。您应该打印已转换的字符串。
  • 不为scanf第31行中的字符串传递函数分配内存: scanf("%s", upperlower);
  • 将一个整数与一个函数指针进行比较,第20行:for (i = 0; i<length; i++)你的意思是i < length(s)

除了这些,我改变了这样的主体:

  char aStr[1000];
  printf("Please write down the character string: ");
  scanf("%s", aStr);
  upperlower(aStr);
  printf("The character string is %s", aStr);
  return 0;

在运行它时,我能够看到所需的输出:

~/Documents/src : $ gcc testType.c 
~/Documents/src : $ ./a.out 
Please write down the character string: Rohan
The character string is rOHAN