【问题标题】:cast from pointer to integer of different size [-Wpointer-to-int-cast]从指针转换为不同大小的整数 [-Wpointer-to-int-cast]
【发布时间】:2022-12-11 23:37:21
【问题描述】:

I keep getting these warnings

我想计算 (Mo) 中的彩色图像大小和 (Ko) 中的黑白图像大小,因此为此我使用了终端命令中过去的参数,即(图像长度和宽度)

这是我的代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

int main(int argc, char *argv[]) {
   
   float resultKo, resultMo;

   resultKo = ((int)argv[1] * (int)argv[2]) / (1024);
   resultMo = (((int)argv[1] * (int)argv[2])/(1024 * 1024))*3;

   printf("la taille de l'image en niveau de gris : %.2fko\n",resultKo);
   printf("la taille de l'image en couleur : %.2fMo", resultMo);
   return 0;
}

【问题讨论】:

  • argv[1] 是一个字符串,char *。您正在将其转换为 int
  • argv[1] 的类型为 char *。您没有理由将该指针转换为int。这不会将字符串转换为整数。它会简单地转换(并且可能截断)指针本身的值。
  • 使用函数 atoistrtol 将以文本形式存储的数字分别转换为 intlong int
  • 除非您首先检查了argc,以确保argv 元素确实有效,否则切勿使用来自argv 的任何元素。

标签: c


【解决方案1】:

要在 C 中将 char* 转换为 int,您不需要强制转换指针。相反,您使用atoi

【讨论】:

  • 请注意,atoi 没有任何类型的验证。最好改用strtol
  • 没有don't use atoi()。请改用strtol
  • 非常感谢先生
猜你喜欢
  • 2014-03-20
  • 1970-01-01
  • 1970-01-01
  • 2012-03-04
  • 2019-12-07
  • 2015-06-04
  • 2021-03-10
  • 1970-01-01
相关资源
最近更新 更多