gpt4 book ai didi

c - 警告 : "assignment discards ' const' qualifier from pointer target type"

转载 作者:行者123 更新时间:2023-11-30 15:02:51 26 4
gpt4 key购买 nike

我制作了自己的 strtod() 函数。

我可以在控制台中printf,但它在运行时会发出如下警告:

myStrTod.c|29|warning: "assignment discards 'const' qualifier from pointer target type"|

<小时/>
#include<stdio.h>
float myStrTod(const char * nPtr, char ** endPtr);
int rakamMi(int c);

int main()
{
float d;
const char *string = "51.2% kabul edildi";
char *stringPtr;

d = myStrTod(string,&stringPtr);
printf("%.3f %s\n",d,stringPtr);
return 0;
}

float myStrTod(const char * nPtr, char ** endPtr)
{
char s1[20],s2[50];
int i,j,k = 0,pnt,y = 1,num1 = 0,num2= 0;
float f1,f2;
for(i = 0; nPtr[i]; i++){
if(rakamMi(nPtr[i]) || nPtr[i] == '.')
s1[i] = nPtr[i];
else break;
}
j = i;
for(; nPtr[i]; i++)
endPtr[i - j] = nPtr + i;

for(i = 0; s1[i]; i++)
if(s1[i] == '.'){
pnt = i;
break;
}

for (i = 0; s1[i]; i++)
{
if(i < pnt) num1 = num1 * 10 + (s1[i] - 48);
else if (i == pnt) continue;
else{
num2 = num2 * 10 + (s1[i] - 48);
++k;
}
}
for(i = 1; i <= k; i++)
y = y * 10;

f1 = num2 / (float) y;
f2 = num1 + f1;
// endPtr = s2;
return f2;
}

int rakamMi(int c)
{
if(c >= 48 && c <= 57)
return 1;
else
return 0;
}

最佳答案

您正在尝试将指针常量字符类型的值分配给指针字符类型的变量。您可以更改 myStrTod 的签名,以便您的输出指向 const char 的指针:

float myStrTod(const char *nPtr, const char **endPtr);

然后GCC会报告不同的错误:

40937624.c: In function ‘main’:
40937624.c:11:25: warning: passing argument 2 of ‘myStrTod’ from incompatible pointer type [-Wincompatible-pointer-types]
d = myStrTod(string,&stringPtr);
^
40937624.c:2:7: note: expected ‘const char **’ but argument is of type ‘char **’

可以通过将 stringPtr 声明为 const 指针来修复此问题:

const char *stringPtr;

由于您从未写入*stringPtr 的内容,因此这就足够了。

关于c - 警告 : "assignment discards ' const' qualifier from pointer target type",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40937624/

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