C++ .NET Непойму почему!
От: Losar Россия  
Дата: 11.10.04 13:52
Оценка:
У меня такой вопрос!
Есть код написанный на C++.NET
#include <string.h>
using namespace System;

__gc class Test
{
    char t __gc[];
public:
    Test()
    {
        t = new char __gc[11];
        char __pin * t_ptr = &t[0];
        strcpy (t_ptr, "12345");
    }
    void OutString()
    {
        Console::WriteLine(t);
    }
};
int main()
{
    Test * test = new Test;
    test->OutString();
    return 0;
}

Вроде бы всё компилится, но выводит на экран не "12345" а System.SByte[], что это за бойда? И как с этим боротся.
Кстати если проверять программу пошагово, ты студия показывает что t после копирования есть "12345"

11.10.04 20:18: Перенесено модератором из 'C/C++' — Павел Кузнецов
Re: C++ .NET Непойму почему!
От: _nn_  
Дата: 11.10.04 13:56
Оценка:
Здравствуйте, Losar, Вы писали:

L>У меня такой вопрос!

L>Есть код написанный на C++.NET

L>#include <string.h>

L>using namespace System;

L>__gc class Test

L>{
L> char t __gc[];
L>public:
L> Test()
L> {
L> t = new char __gc[11];
L> char __pin * t_ptr = &t[0];
L> strcpy (t_ptr, "12345");
L> }
L> void OutString()
L> {
L> Console::WriteLine(t);
L> }
L>};
L>int main()
L>{
L> Test * test = new Test;
test->>OutString();
L> return 0;
L>}

L>Вроде бы всё компилится, но выводит на экран не "12345" а System.SByte[], что это за бойда? И как с этим боротся.

L>Кстати если проверять программу пошагово, ты студия показывает что t после копирования есть "12345"

А зачем такие извращения если есть String ?
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: C++ .NET Непойму почему!
От: Losar Россия  
Дата: 11.10.04 13:59
Оценка:
Здравствуйте, _nn_, Вы писали:
__>А зачем такие извращения если есть String ?

String конечно хорошо, но надо так!
В чем же всё таки дело?
Re: C++ .NET Непойму почему!
От: Glоbus Украина  
Дата: 11.10.04 14:04
Оценка:
Здравствуйте, Losar, Вы писали:

L>У меня такой вопрос!

L>Есть код написанный на C++.NET

L>#include <string.h>

L>using namespace System;

L>__gc class Test

L>{
L> char t __gc[];
L>public:
L> Test()
L> {
L> t = new char __gc[11];
L> char __pin * t_ptr = &t[0];
L> strcpy (t_ptr, "12345");
L> }
L> void OutString()
L> {
L> Console::WriteLine(t);
L> }
L>};

L>Вроде бы всё компилится, но выводит на экран не "12345" а System.SByte[], что это за бойда? И как с этим боротся.

L>Кстати если проверять программу пошагово, ты студия показывает что t после копирования есть "12345"

Все дело в выделенной строчке. Дело в том, что WriеeLine у объекта вызываtт ToString(), а для объекта массива с точки зрения виртуальной машины его ToString() будет как раз System.SByte[]. Ради интереса можешь вызвать WriteLine() с Hashtable например.
Удачи тебе, браток!
Re: C++ .ЕСТЬ известнодело почему!
От: achp  
Дата: 11.10.04 14:23
Оценка:
Здравствуйте, Losar, Вы писали:

L>        Console::WriteLine(t);

Перепиши:
Console::WriteLine(new System::String(t));
Я кончил, джентльмены, мне остается только поблагодарить вас за внимание.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.