gpt4 book ai didi

c - 为什么我可以将一个字符串分配给一个 float 指针?

转载 作者:太空宇宙 更新时间:2023-11-04 06:06:12 24 4
gpt4 key购买 nike

为什么下面的代码有效?这应该是编译错误(或至少是运行时错误)吗?

#include <stdio.h>

int main(int argc, char** argv){
float *buf = "happy holiday"; // notice the float
printf("content of buf = %s\n",buf); //its working
return 0;
}

我编译它并得到一个警告:

~/Desktop/cTest>gcc -o run run.c
run.c: In function `main':
run.c:4: warning: initialization from incompatible pointer type

最佳答案

您应该始终使用 -Wall -Werror -Wextra 进行编译(至少)。然后你得到这个:

cc1: warnings being treated as errors
test.c: In function 'main':
test.c:4: warning: initialization from incompatible pointer type
test.c:5: warning: format '%s' expects type 'char *', but argument 2 has type 'float *'
test.c: At top level:
test.c:3: warning: unused parameter 'argc'
test.c:3: warning: unused parameter 'argv'

它“有效”是因为在实践中,char *float * 在您平台的底层没有区别。您的代码与:

#include <stdio.h>

int main(int argc, char** argv){
float *buf = (float *)"happy holiday";
printf("content of buf = %s\n",(char *)buf);
return 0;
}

这是明确定义的行为,除非 floatchar 的对齐要求不同,在这种情况下会导致未定义的行为(参见 C99,6.3.2.3 p7 ).

关于c - 为什么我可以将一个字符串分配给一个 float 指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10080139/

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