Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как в char массив добавить символ 
V
    Опции темы
Barabeo
Дата 26.10.2012, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 2.10.2010

Репутация: нет
Всего: нет



Есть символ
Код

string x="u"

Есть массив 
Код

char massTMP[10]

В этот массив, в начало, нужно добавить символ "u".
не помогает:
Код

strcpy(massTMP[0], x.c_str())

и так тоже:
Код

char x[2] = {"u"};  
char massTMP[10];
massTMP[0] = x[2];


Т.е. суть в том чтобы получить имя компа и к имени добавить символ "u".
Код

char compname[6];
char x[2] = {"u"};  
DWORD size = 256;
char massTMP[10];

   GetComputerNameA(compname,&size);

   massTMP[0] = x[2];
   //strcpy(massTMP[0], x.c_str());
   
   for(int i=1,j=0; j<4; i++, j++)
   {
    massTMP[i] = compname[j];
   }


Это сообщение отредактировал(а) Barabeo - 26.10.2012, 18:09
PM MAIL   Вверх
McMan
Дата 26.10.2012, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 21.2.2007
Где: Ярославль

Репутация: нет
Всего: 1



massTMP[0] = x[2]; - это что такое?


Это сообщение отредактировал(а) McMan - 26.10.2012, 22:41
PM MAIL   Вверх
McMan
Дата 26.10.2012, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 21.2.2007
Где: Ярославль

Репутация: нет
Всего: 1



Код

#include <stdio.h>

int main(int argc,char** argv)
{
    char compname[6]="bla";
    char massTMP[10];
    int i,j;

    printf("%s\n",compname);

    massTMP[0]='u';
    for(i=1,j=0; j<6; i++, j++)
    {
         massTMP[i] = compname[j];
    }
    printf ("%s\n",massTMP);

}

как то так. не?
и compname зачем такой короткий?

massTMP[0] = x[2]; - это что такое?

UPD
Цитата

Есть символ
  string x="u"


дело в том, что это не символ
PM MAIL   Вверх
Barabeo
Дата 26.10.2012, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 2.10.2010

Репутация: нет
Всего: нет



Вот переписал:
Код

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

int main(int argc, char** argv)
{
    char compname[7];
    char massTMP[7];
    DWORD size = 256;
    int i,j;

    GetComputerNameA(compname,&size);

    printf("%s\n",compname);
    massTMP[0]='u';
    for(i=1,j=0; j<8; i++, j++)
    {
         massTMP[i] = compname[j];
    }
    printf ("%s\n",massTMP);
    system("pause");
    return 0;
}

Выводит то что нужно.
только в конце вываливается ошибка:

Run-Time Check Failure #2 - Stack around the variable 'massTMP' was corrupted.
PM MAIL   Вверх
feodorv
Дата 26.10.2012, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(Barabeo @  27.10.2012,  00:02 Найти цитируемый пост)
    char compname[7];

Цитата(Barabeo @  27.10.2012,  00:02 Найти цитируемый пост)
   GetComputerNameA(compname,&size);

Может, 7-ми символов маловато для имени компьютера?

Добавлено через 1 минуту и 41 секунду
Код

    char compname[MAX_COMPUTERNAME_LENGTH+1];



--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Barabeo
Дата 26.10.2012, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 2.10.2010

Репутация: нет
Всего: нет



Цитата(feodorv @ 26.10.2012,  23:07)
Цитата(Barabeo @  27.10.2012,  00:02 Найти цитируемый пост)
    char compname[7];

Цитата(Barabeo @  27.10.2012,  00:02 Найти цитируемый пост)
   GetComputerNameA(compname,&size);

Может, 7-ми символов маловато для имени компьютера?

Добавлено @ 23:09
Код

    char compname[MAX_COMPUTERNAME_LENGTH+1];

Ну это я так для примера. Как исправить ошибку со стеком?
PM MAIL   Вверх
feodorv
Дата 26.10.2012, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(Barabeo @  27.10.2012,  00:15 Найти цитируемый пост)
Как исправить ошибку со стеком? 


Цитата(feodorv @  27.10.2012,  00:07 Найти цитируемый пост)
    char compname[ MAX_COMPUTERNAME_LENGTH+1 ];


Добавлено @ 23:19
Цитата(Barabeo @  27.10.2012,  00:02 Найти цитируемый пост)
    char massTMP[7];

Код

   char massTMP[ MAX_COMPUTERNAME_LENGTH+2 ];


Добавлено @ 23:20
Цитата(Barabeo @  27.10.2012,  00:02 Найти цитируемый пост)
         massTMP[i] = compname[j];

По окончании цикла
Код

         massTMP[i] = '\0';


Это сообщение отредактировал(а) feodorv - 26.10.2012, 23:21


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Barabeo
Дата 26.10.2012, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 2.10.2010

Репутация: нет
Всего: нет



Цитата(feodorv @ 26.10.2012,  23:17)
Цитата(Barabeo @  27.10.2012,  00:15 Найти цитируемый пост)
Как исправить ошибку со стеком? 


Цитата(feodorv @  27.10.2012,  00:07 Найти цитируемый пост)
    char compname[ MAX_COMPUTERNAME_LENGTH+1 ];


Добавлено @ 23:19
Цитата(Barabeo @  27.10.2012,  00:02 Найти цитируемый пост)
    char massTMP[7];

Код

   char massTMP[ MAX_COMPUTERNAME_LENGTH+2 ];

Так я же исправил, но ошибка осталась:
Код

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

int main(int argc, char** argv)
{
    char compname[MAX_COMPUTERNAME_LENGTH+1];
    char massTMP[7];
    DWORD size = 256;
    int i,j;

    GetComputerNameA(compname,&size);

    printf("%s\n",compname);
    massTMP[0]='u';
    for(i=1,j=0; j<8; i++, j++)
    {
         massTMP[i] = compname[j];
    }
    printf ("%s\n",massTMP);
    system("pause");
    return 0;
}


Появляется после того как я нажимаю enter:
Run-Time Check Failure #2 - Stack around the variable 'massTMP' was corrupted.
PM MAIL   Вверх
feodorv
Дата 26.10.2012, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(Barabeo @  27.10.2012,  00:02 Найти цитируемый пост)
    DWORD size = 256;


Код

    DWORD size = sizeof(compname)-1;


Добавлено @ 23:23
Цитата(feodorv @  27.10.2012,  00:17 Найти цитируемый пост)
Цитата(Barabeo @  27.10.2012,  00:02 Найти цитируемый пост)
    char massTMP[7];

Выделить всёкод C++
1:
    
   char massTMP[ MAX_COMPUTERNAME_LENGTH+2 ];


Добавлено @ 00:20
Цитата(Barabeo @  27.10.2012,  00:02 Найти цитируемый пост)
         massTMP[i] = compname[j];

По окончании цикла
Выделить всёкод C++
1:
    
         massTMP[i] = '\0';



Это сообщение отредактировал(а) feodorv - 26.10.2012, 23:25


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Barabeo
Дата 26.10.2012, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 2.10.2010

Репутация: нет
Всего: нет



Цитата(feodorv @ 26.10.2012,  23:17)

По окончании цикла
Код

         massTMP[i] = '\0';

Даже после этого осталась.
PM MAIL   Вверх
feodorv
Дата 26.10.2012, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(feodorv @  27.10.2012,  00:23 Найти цитируемый пост)


    DWORD size = sizeof(compname)-1;




--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Barabeo
Дата 26.10.2012, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 2.10.2010

Репутация: нет
Всего: нет



Цитата(feodorv @ 26.10.2012,  23:25)
Цитата(feodorv @  27.10.2012,  00:23 Найти цитируемый пост)


    DWORD size = sizeof(compname)-1;

Все равно не получается:
Код

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

int main(int argc, char** argv)
{
    char compname[MAX_COMPUTERNAME_LENGTH+1];
    char massTMP[7];
    DWORD size = sizeof(compname)-1;
    int i,j;

    GetComputerNameA(compname,&size);

    printf("%s\n",compname);
    massTMP[0]='u';
    for(i=1,j=0; j<8; i++, j++)
    {
         massTMP[i] = compname[j];
    }
    massTMP[i]= '\0';
    printf ("%s\n",massTMP);
    system("pause");
    return 0;
}


Run-Time Check Failure #2 - Stack around the variable 'massTMP' was corrupted.
PM MAIL   Вверх
feodorv
Дата 26.10.2012, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(Barabeo @  27.10.2012,  00:22 Найти цитируемый пост)
    for(i=1,j=0; j<8; i++, j++)

Цитата(Barabeo @  27.10.2012,  00:22 Найти цитируемый пост)
         massTMP[i] = compname[j];

Какой интервал изменения переменной i (а идёт присвоение massTMP[i] = ... )?
От 1 до 8. То есть в цикле будет выполнен код massTMP[8] = ...
А какой размер массива massTMP?
Цитата(Barabeo @  27.10.2012,  00:22 Найти цитируемый пост)
    char massTMP[7];

Поэтому:

Цитата(feodorv @  27.10.2012,  00:23 Найти цитируемый пост)
   char massTMP[ MAX_COMPUTERNAME_LENGTH+2 ];




--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Barabeo
Дата 26.10.2012, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 2.10.2010

Репутация: нет
Всего: нет



Всё понял. Спасибо всем помогавшим!
Код

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

int main(int argc, char** argv)
{
    char compname[MAX_COMPUTERNAME_LENGTH+1];
    char massTMP[MAX_COMPUTERNAME_LENGTH+2];
    DWORD size = sizeof(compname)-1;
    int i,j;

    GetComputerNameA(compname,&size);

    printf("%s\n",compname);
    massTMP[0]='u';
    for(i=1,j=0; j<8; i++, j++)
    {
         massTMP[i] = compname[j];
    }
    massTMP[i]= '\0';
    printf ("%s\n",massTMP);
    system("pause");
    return 0;
}


PM MAIL   Вверх
feodorv
Дата 26.10.2012, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(Barabeo @  27.10.2012,  00:30 Найти цитируемый пост)
Всё понял. Спасибо всем помогавшим!

Давайте уж добьём задачу. Осталось немного:
Код

if( !GetComputerNameA(compname,&size) )
{
    printf( "Error of  GetComputerNameA\n" );
    return -1;
}
compname[MAX_COMPUTERNAME_LENGTH] = '\0';



Цитата(Barabeo @  27.10.2012,  00:30 Найти цитируемый пост)
    for(i=1,j=0; j<MAX_COMPUTERNAME_LENGTH; i++, j++)




--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0593 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.