在我的C程序中,我在一个整数变量中分配了一个字符串,并用百分比%s打印,它将带警告整数的字符串打印到指针而没有强制转换,并用%d打印,其打印为134513904,然后我更改了字符串值并使用%d“ 134513904”打印此值是什么,整数变量如何在int变量中存储字符串值?
enter code here
#include<stdio.h>
main()
{
int a="naveen";
printf("%d\n",a);
printf("\n%s\n",a);
if("naveen")
{
printf("hi");
}
int_point.c: In function ‘main’:
int_point.c:22:8:警告:初始化从指针生成整数而没有强制转换[默认启用]int a =“ naveen”;^int_point.c:24:2:警告:格式“%s”期望的类型为“ char *”,而参数2的类型为“ int” [-Wformat =]printf(“ \ n%s \ n”,a);^134513920
naveen嗨
以下内容将指针(不是字符串)分配给s
:
const char *s = "navven";
这意味着以下内容将[[指针(不是字符串)分配给a
:
int a = "naveen";
计算机并没有真正看到指针和数字之间的区别。它们都是适合他们的寄存器的东西。有些人利用这一事实。因此,尽管编译器警告您做错了什么,但仍可以让您将指针视为数字。因此
a
如果是int
,则以指针的值结尾。那是不安全的。不完全的。虽然您不能安全地使用int
,但是可以安全地使用intptr_t
。
#include <stdint.h> int main(void) { const char *p1 = "naveen"; printf("%p %s\n", p1, p1); intptr_t i = (intptr_t)p1; const char *p2 = (const char*)i; printf("%p %s\n", p2, p2); return 0; }