使用strdup()后将char*转换为int

Rod*_*ion 4 c c++ pointers type-conversion strdup

使用后为什么strdup(value) (int)value返回不同的输出?如何获得相同的输出?

我的简短示例变坏了,请使用长的:这里是测试的完整代码:

#include <stdio.h>
#include <iostream>

int main()
{

    //The First Part
    char *c = "ARD-642564";
    char *ca = "ARD-642564";

    std::cout << c << std::endl;
    std::cout << ca << std::endl;

//c and ca are equal
    std::cout << (int)c << std::endl;
    std::cout << (int)ca << std::endl;


    //The Second Part
    c = strdup("ARD-642564");
    ca = strdup("ARD-642564");

    std::cout << c << std::endl;
    std::cout << ca << std::endl;

//c and ca are NOT equal Why?
    std::cout << (int)c << std::endl;
    std::cout << (int)ca << std::endl;

    int x;
    std::cin >> x;
}
Run Code Online (Sandbox Code Playgroud)

md5*_*md5 7

因为数组衰减到你的情况下的指针,你正在打印一个指针(即,在非奇特的计算机上,一个内存地址).无法保证指针适合于int.

  • 在代码的第一部分,cca不必相等.您的编译器执行一种内存优化(请参阅此处获取完整答案).

  • 在第二部分中,strdup动态分配两次字符串,以使返回的指针不相等.编译器不优化这些调用,因为他似乎没有控制它的定义strdup.

在这两种情况下,c并且ca可以不相等.