Преобразование char * в int после использования 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;
}

4

Решение

Поскольку массив распадается на указатель в вашем случае, вы печатаете указатель (т.е. на не экзотических компьютерах адрес памяти). Нет гарантии, что указатель вписывается в int,

  • В первой части вашего кода c а также ca не должно быть равным. Ваш компилятор выполняет своего рода оптимизацию памяти (см. Вот для полного ответа).

  • Во второй части strdup динамически выделяет строку дважды, так что возвращаемые указатели не равны. Компилятор не оптимизирует эти вызовы, потому что он, кажется, не контролирует определение strdup,

В обоих случаях, c а также ca не может быть равным

7

Другие решения

«Функция strdup () должна возвращать указатель на новая строка, который является дубликатом строки, на которую указывает s1. » источник

Так что вполне понятно, что указатели отличаются.

4

По вопросам рекламы [email protected]