【问题标题】:How can I solve my code error when use pointer for char使用 char 指针时如何解决我的代码错误
【发布时间】:2018-01-31 11:56:50
【问题描述】:

当我尝试编译时收到警告,我无法解决这个问题。你们能帮帮我吗?谢谢。

警告:初始化从没有强制转换的指针生成整数 [-Wint 转换] char ch = NULL; ^

这里是我的代码:

#include <stdio.h>
#include <string.h>
#include "order.h"
void readInts(int* ptr1, int*ptr2, int*ptr3, char* ptrChar);

int main(void)
{
    int p1, p2, p3;
    char ch == NULL;
    readInts(&p1, &p2, &p3, &ch);

    if (ch == 'A')
    {
    printf("%s\n", "Ascending3");
    printf("%s %d %d %d\n", "Before swap: ", p1, p2, p3);
    ascending3(&p1, &p2, &p3);
    printf("%s %d %d %d\n\n", "After: ", p1, p2, p3);
    }
    else if (ch =='B')
    {
    printf("%s\n", "Descending3");
    printf("%s %d %d %d\n", "Before swap: ", p1, p2, p3);
    descending3(&p1, &p2, &p3);
    printf("%s %d %d %d\n\n", "After swap: ", p1, p2, p3);
    }
    return 0;
}

void readInts(int* ptr1, int* ptr2, int* ptr3, char* ptrChar)
{
    printf("%s\n", "Enter 3 numbers: ");
    scanf("%d %d %d", ptr1, ptr2, ptr3);
    printf("%s\n", "Enter a character A&B");
    scanf(" %c", ptrChar);
}

【问题讨论】:

  • 你认为char ch == NULL; 的声明是做什么的?空字符和NULL指针有什么区别?
  • char ch == NULL; (== 错字为=)--> char ch = 0;
  • 欢迎来到 Stack Overflow。请注意,在这里说“谢谢”的首选方式是投票赞成好的问题和有用的答案(一旦你有足够的声誉这样做),并接受对你提出的任何问题最有帮助的答案(这也给出了你的声誉小幅提升)。请查看About 页面以及How do I ask questions here?What do I do when someone answers my question?

标签: c pointers


【解决方案1】:

编译器告诉您它期望将 NULL 分配给指针类型。您将 NULL 分配给字符,而不是字符指针。因此,它在将 NULL 指针分配给字符 ch 之前将其隐式转换为 0 整数。

它警告您,这可能不是您想要的,您应该检查代码。在您的情况下,您可能只想将 0 分配给角色。

char ch = 0;

【讨论】:

  • 或者,更好的是char ch = '\0';
  • @JonathanLeffler 好点。您的 '\0' 文字将具有 char 类型,至少在符合 C++ 的编译器中是这样。因此,从技术上讲,这将具有更合适的类型。但是,由于问题被标记为“c”并且我们在这里很迂腐,因此字符文字在普通的旧 C 中具有 int 类型。因此,如果您使用的是 C 编译器,则 '\0' 和 0 完全相同.您可能希望使用字符文字符号来提醒自己和代码的未来读者,该值确实是一个字符,但我更愿意跳过无关的 3 次击键。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多