同时将字符串值赋予整数,这是怎么回事?

问题描述 投票:-1回答:1

在我的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嗨

c if-statement casting
1个回答
0
投票

以下内容将指针(不是字符串)分配给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; }

© www.soinside.com 2019 - 2024. All rights reserved.