在我的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
纳文 嗨
答案 0 :(得分:2)
以下内容为StructType(
分配了一个指针(不是字符串):
s
这意味着以下内容为const char *s = "navven";
分配了一个指针(不是字符串):
a
计算机并没有真正看到指针和数字之间的区别。它们都是适合其寄存器的东西。有些人利用这一事实。因此,尽管编译器警告您做错了事,但仍然可以让您将指针视为数字。
如果int a = "naveen";
是a
,则以指针的值结尾。那是不安全的。不完全的。虽然不能安全地使用int
,但是可以安全地使用int
。
intptr_t
输出:
#include <inttypes.h>
#include <stdint.h>
#include <stdio.h>
int main(void) {
const char *p1 = "naveen";
printf("%p %s\n", p1, p1);
intptr_t i = (intptr_t)p1;
printf("0x%" PRIxPTR "\n", i);
const char *p2 = (const char*)i;
printf("%p %s\n", p2, p2);
return 0;
}