【问题标题】:warning : return makes pointer from integer without a cast警告:return 从整数中生成指针而不进行强制转换
【发布时间】:2021-07-12 22:19:58
【问题描述】:
struct Stack {
    char top;
    unsigned capacity;
    char* array;
};   
char*pop(struct Stack* stack)
{
    if (isEmpty(stack)){
        printf("Stack underflow\n");
     
    }
        return  stack->array[stack->top--];
}
char* peek(struct Stack* stack)
{
    if (isEmpty(stack)){
      printf("Stack underflow\n");
    }else{
    return stack->array[stack->top];
}}
***main.c:56:29: warning: return makes pointer from integer without a cast [-Wint-conversion]                                                    
main.c:67:24: warning: return makes pointer from integer without a cast [-Wint-conversion]

我有这两个警告,我无法处理,我需要帮助,请

警告在这两行:

 return  stack->array[stack->top--]......
 return stack->array[stack->top]

【问题讨论】:

  • 返回类型或成员array的类型错误。在没有上下文的情况下,尚不清楚哪个是预期的。
  • 如果array的类型正确,函数应该返回char,因为array指向的数组元素是char。如果返回类型正确,则成员 array 应为 char**
  • 旁注:peek() 不会从 if 分支返回任何内容。
  • 我将数组类型更改为 char** 并且两个警告消失了.. 但是另一个名为 push 的函数中的另一个警告出现了.. 这是函数和警告:void push(struct Stack* stack, char* item) { if (isFull(stack)) printf("堆栈溢出\n"); else { 堆栈->数组[++stack->top] = *item; } 赋值使指针从整数不进行强制转换

标签: arrays c pointers data-structures stack


【解决方案1】:

将函数返回类型都更改为char 而不是char*,因为stack->array[stack->top] 将返回一个字符而不是char*

另外,附带说明一下,您的 peek() 不会从 if 分支返回任何内容。将其更改为返回一些内容(根据您的程序逻辑一个虚拟字符)或将其设为独立的 if 语句,如 pop() 中的语句。

【讨论】:

  • 我尝试更改函数类型,但没有成功......我将数组类型更改为 char** 并且两个警告消失了......但是另一个名为 push 的函数中的另一个警告出现了。 . 这是函数和警告: void push(struct Stack* stack, char* item) { if (isFull(stack)) printf("Stack Overflow\n"); else { 堆栈->数组[++stack->top] = *item; } 赋值使指针从整数不进行强制转换
  • 感谢您对 peek 功能的说明
  • @Rama 如果我理解正确,您想创建一堆字符串吗?这将是有道理的,为什么将返回类型更改为 char* 修复了警告。来到push(),您将在stack->array[++stack->top] = *item; 语句中将char 分配给char*,因为itemchar*(一个字符数组),而*itemchar。这就是您收到该警告的原因(这是您最初在问题中提出的警告的 reverse)。
  • 是的,你理解正确......所以,我应该怎么做才能让最后的警告变红......谢谢
  • @Rama 由于您需要在堆栈中保留一份副本,因此执行简单的stack->array[++stack->top] = item 并不安全。使用strdup 之类的东西来创建传入item 的副本并执行stack->array[++stack->top] = strdup(item)
【解决方案2】:

信息很清楚。你试图返回一个整数而不是一个指针。

stack->array[stack->top--]; 是数组stack->array 中位置stack->top-- 的元素

所以将 return stack->array[stack->top--]; 更改为 return stack->array;

或者将返回类型更改为char 而不是char*,具体取决于您要实现的目标。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-19
    • 2023-02-08
    • 2012-09-22
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 2015-10-19
    相关资源
    最近更新 更多