gpt4 book ai didi

编译错误: "format ‘%f’ expects argument of type ‘double’ "

转载 作者:行者123 更新时间:2023-11-30 18:45:24 25 4
gpt4 key购买 nike

该程序采用 9 个字长的代码(例如:011112222)。第一个数字是操作的代码(0 表示 +,1 表示 -,2 表示 *,3 表示 /)接下来的 4 个数字是第一个数字,另外 4 个数字是另一个数字,因此对于 011112222 ,结果应该是 1111+2222。这是我的代码:

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

float* Calculate(char* buffer)
{
int number1, number2;

char *firstPart = (char *)malloc(strlen(buffer));
char *secondPart = (char *)malloc(strlen(buffer));

strncpy(firstPart, buffer+1, 4);
strncpy(secondPart, buffer+5, 8);

number1 = atoi(firstPart);
number2 = atoi(secondPart);

float *result;

if( buffer[0] == '0')
{
*result = (float)number1 + (float)number2;
}
else if(buffer[0] == '1')
{
*result = (float)number1 - (float)number2;
}
else if(buffer[0] == '2')
{
*result = (float)number1 * (float)number2;
}
else if(buffer[0] == '3')
{
*result = (float)number1 / (float)number2;
}

return result;
}

int main()
{
char buffer[20];
printf("Insert code word: ");
scanf("%s", buffer);

float *result = Calculate(buffer);
printf("%f", result);

return 1;
}

但我收到此错误:

In function ‘main’:
zadatak.c:54:14: warning: format ‘%f’ expects argument of type ‘double’, but argument 2 has type ‘float *’ [-Wformat=]
printf("%f", result);

是什么原因导致此警告以及如何解决它?

最佳答案

在您的 printf 中调用:

printf("%f", result);

%f格式说明符需要 double (或者自动转换的float),但是您将其传递给 float 的指针。您需要取消引用指针才能获取 float值:

printf("%f", *result);

但是,您还有另一个问题。

Calculate内部你定义result ,这是您从函数返回的内容,作为指向 float 的指针,但你从未将其设置为指向任何地方。因此,每当您尝试取消引用该指针时,您都会读取未初始化的值并将其用作有效指针。这样做会调用 undefined behavior .

没有理由使用指向 float 的指针在您的代码中,因此更改 resultmainresultCalculate来自float *float ,并更改 Calculate返回 float .

此外,strncpy函数并不总是以 null 终止目标字符串,并且 malloc返回未初始化的内存,因此 atoi will 在读取字符串时可以读取已分配内存的末尾。您可以使用 calloc 来修复此问题而不是malloc它返回初始化为全 0 的内存。另外,请务必free当您使用完这些缓冲区时。

float Calculate(char* buffer)
{
int number1, number2;

char *firstPart = calloc(strlen(buffer), 1);
char *secondPart = calloc(strlen(buffer), 1);

strncpy(firstPart, buffer+1, 4);
strncpy(secondPart, buffer+5, 8);

number1 = atoi(firstPart);
number2 = atoi(secondPart);

free(firstPart);
free(secondPart);

float result;

if( buffer[0] == '0')
{
result = (float)number1 + (float)number2;
}
else if(buffer[0] == '1')
{
result = (float)number1 - (float)number2;
}
else if(buffer[0] == '2')
{
result = (float)number1 * (float)number2;
}
else if(buffer[0] == '3')
{
result = (float)number1 / (float)number2;
}

return result;
}

int main()
{
char buffer[20];
printf("Insert code word: ");
scanf("%s", buffer);

float result = Calculate(buffer);
printf("%f", result);

return 1;
}

关于编译错误: "format ‘%f’ expects argument of type ‘double’ ",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54892951/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com