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

时间:2013-03-23 11:05:22

标签: 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;
}

2 个答案:

答案 0 :(得分:7)

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

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

  • 在第二部分中,strdup动态分配一个字符串两次,这样返回的指针就不相等了。编译器不优化这些调用,因为他似乎无法控制strdup的定义。

在这两种情况下,cca可能不相等。

答案 1 :(得分:4)

  

“strdup()函数应返回指向新字符串的指针,该字符串是s1指向的字符串的副本。” source

所以指针的不同是可以理解的。