Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Определить имя компьютера на C + API

23K
02 января 2009 года
s0cks
41 / / 02.02.2008
написал небольшую программу для определения имени компа на чистом си + апи,но никак не могу понять в чем ошибка,помогите кто может,буду очень признателен:o

вот исходник
Код:
#include <stdio.h>
#include <windows.h>
 
int main (void)
{
      char define(void);

      printf("Youre comp name is %c\n", define());

      return 0 ;
         
}
         
char define(void)
{
    char buffer[30];
        DWORD size;
    size=sizeof(buffer);
    GetComputerName(buffer,&size);
    return buffer;
}
23K
02 января 2009 года
s0cks
41 / / 02.02.2008
одну ошибку исправил,чтобы компилилось надо было исходный файл переменовать из *.cpp в *.с но имя компа не выводиться все равно...(
397
02 января 2009 года
SergPas
527 / / 03.02.2007
В Вашем примере переменная
Цитата:
[COLOR=#000000][COLOR=#0000bb]buffer[/COLOR][/COLOR]

является локальной, которая автоматически уничтожается в момент возврата из функции

Цитата:
define

Я бы написал так:

 
Код:
#include <iostream.h>
 char buffer[10];
int main (void)
{
      unsigned long size=sizeof(buffer);
      GetComputerName(buffer, &size);
      cout<<buffer<<endl;
      return 0 ;        
}
12K
07 января 2009 года
lifs
163 / / 06.09.2007
Кроме ошибки с массивом, в строчке
 
Код:
printf("Youre comp name is %c\n", define());

надо писать вместо - %s
63K
15 сентября 2010 года
Неля
2 / / 15.09.2010
#include <stdafx.h>
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <windows.h>


int main (void)
{
char buffer[10];
unsigned long size=50;
GetComputerName(buffer, &size);
//cout<<buffer<<endl;
printf(buffer,"s");
return 0 ;
}
63K
15 сентября 2010 года
Неля
2 / / 15.09.2010
или так :

#include <stdafx.h>
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <windows.h>


int main (void)
{
char buffer[10];
unsigned long size=50;
GetComputerName(buffer, &size);
cout<<buffer<<endl;
//printf(buffer,"s");
return 0 ;
}
14
15 сентября 2010 года
Phodopus
3.3K / / 19.06.2008
Цитата: Неля

printf(buffer,"s");


имелось ввиду printf("%s", buffer) что ли?

399
15 сентября 2010 года
KIV
432 / / 20.01.2009
 
Код:
char *define

функция должна возвращать не один символ, а указатель на строку!
297
15 сентября 2010 года
koodeer
1.2K / / 02.05.2009
Неля, уж если вы уверяете, что это правильное решение, то хотя бы проверяйте его.
Как это понимать:
 
Код:
char buffer[[highlight]10[/highlight]];
unsigned long size=[highlight]50[/highlight];

Правильный вариант определения размера буфера привёл SergPas.
На другую вашу ошибку указал Phodopus.

И ещё: а вдруг проект будет компилиться с юникодной кодировкой?..
Осмелюсь предложить такой вариант, универсальный:
Код:
#include <iostream>
#include <windows.h>

int main()
{
    TCHAR buffer[MAX_COMPUTERNAME_LENGTH + 1];

    DWORD size = sizeof(buffer) / sizeof(TCHAR); // можно так
    //DWORD size = MAX_COMPUTERNAME_LENGTH + 1; // или так

    GetComputerName(buffer, &size);

    std::wcout << buffer << std::endl; // C++  style
    _tprintf(_T("%s\n"), buffer);      // C style

    return 0;
}

Напоследок не мешало бы сделать проверку успешности выполнения функции GetComputerName.

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог