4

为什么使用后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;
}
4

2 回答 2

7

因为在您的情况下数组衰减为指针,所以您正在打印指针(即,在非外来计算机上,内存地址)。不能保证指针适合int.

  • 在代码的第一部分,c不必ca相等。您的编译器执行一种内存优化(完整答案请参见此处)。

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

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

于 2013-03-23T11:07:45.260 回答
4

“strdup() 函数应返回一个指向新字符串的指针,它是 s1 指向的字符串的副本。” 资源

因此,指针不同是可以理解的。

于 2013-03-23T11:07:30.473 回答