C 字符串#define返回一个随机整数
据我所知,define只是一个字符串替换,它不是一个变量,所以它没有任何内存地址之类的东西 假设此代码:C 字符串#define返回一个随机整数,c,c-preprocessor,c-strings,C,C Preprocessor,C Strings,据我所知,define只是一个字符串替换,它不是一个变量,所以它没有任何内存地址之类的东西 假设此代码: #include <stdio.h> #define ONE "a" main() { printf("the number is: %d\n", ONE); } #包括 #定义一个“a” main(){ printf(“编号为:%d\n”,一个); } 然后,当我编译并运行此程序时,每次都会得到一个随机字符串: 电话号码是:8179551 电话号码是:21127
#include <stdio.h>
#define ONE "a"
main() {
printf("the number is: %d\n", ONE);
}
#包括
#定义一个“a”
main(){
printf(“编号为:%d\n”,一个);
}
然后,当我编译并运行此程序时,每次都会得到一个随机字符串:
电话号码是:8179551
电话号码是:2112707
电话号码是:57114463
如果#define
没有任何内存地址,那么这个值是什么?为什么每次都会更改 在您的代码中
printf("the number is: %d\n", ONE);
相当于
printf("the number is: %d\n", "a");
实际上,您正在将字符串“a”
的地址打印为十进制
在每次执行中都会得到随机值,这是因为“a”
的地址在每次执行中都是随机的
字符串
“a”
是一个文本字符串,它存储在只读存储器中。printf
正在打印此内存的地址穆罕默德是对的,您正在打印字符串的地址
你知道怎么做吗
#define ONE 'a'
两个
“
之间的所有内容都是字符,只允许一个字符此程序调用未定义的行为,因为格式规范与参数类型不匹配(int
与char*
)
C99,7.19.6.1#9(fprintf)
如果转换规范无效,则行为无效
未定义。239)如果任何参数不是
对应的转换规范,行为未定义
打印地址的正确方法是使用%p
并通过(void*)
参数:
printf("the address is: %p\n", (void *)ONE);
那每次都要换吗?您所说的打印字符串地址是什么意思?@AfshinMehrabani字符串“a”是一个文本字符串,它存储在只读存储器中。printf正在打印此MemoryStrage的地址。我不知道字符串也存储在内存中!对不起,我是新手。@AfshinMehrabani你想做什么?@MOHAMED不复杂,我只是想知道
#define
和C
中常量之间的区别,所以我写了这段代码来看看。谢谢你,伙计。你正在打印字符串的地址。(用“a”而不是“1”来尝试相同的printf——你会得到相同的结果。)答案的后半部分是系统正在使用,并且你的程序通过传递一个指向printf
的指针(使用%d
格式)来调用未定义的行为,因此你应该避免故意这样做。