Обращение функции к переменной типа char

253
13 сентября 2017, 13:54

Необходимо написать параметры и тело функции func, так чтобы строка вывода программы выглядела следующим образом: text 60. Программа запускается, но вместо текста там просто набор символов а-ля:

ННННННННННННННННээээЭЭЭЭН0щu?I

Что я сделала не так и как это исправить?

#include <iostream>
#include <string.h>
using namespace std;
void func(int& a, char word[])
{
    word = "text";
    a = a*6;
}
int main()
{
    int value1 = 10;
    char* value2 = new char[16];
    func(value1, value2);
    cout << value2 << " " << value1 << "\n";
    delete value2;
    return 0;
}

Так же нужно найти ошибку в выделении памяти.

Answer 1

Для массивов символов не работает присваивание строковых литералов. Чтобы в такой массив записать какую-то строку, нужно использовать функцию strcpy из string.h:

void func(int& a, char word[])
{
    strcpy(word, "text");
    a = a*6;
}

Еще, лучше не называть переменные ничего не значащими именами value1, value2, а называть их согласно назначению.

Answer 2

Странное какое-то задание, неочевидное, и код более чем странный. Вероятно вы даже не понимаете, что делаете. А проблема в том, что word это не внешний массив, который можно изменить простым присваиванием, а указатель.

Т.е. нет никакой разницы между

void func(int& a, char word[])

и

void func(int& a, char* word)

Внутри функции же присваивается адрес локальному для функции указателю. Т.е. то, что снаружи функции value2 фактически никак не меняется. Чтобы оно изменилось, нужно записать данные по указателю word, а не изменить сам указатель. Для строк это можно сделать так:

strcpy(word, "text");

Ну а ещё delete value2; следует заменить на delete [] value2;, т.к. выделяли память для массива, то и удалять надо как для массива.

READ ALSO
Обработка исключений в потоках [требует правки]

Обработка исключений в потоках [требует правки]

Помогите пожалуйста выйти из творческого тупика:

225
openCV ошибка функции распознавания

openCV ошибка функции распознавания

Пишу в Visual Studio 2017 с opencv 33

250
Шифр Цезаря для кириллицы

Шифр Цезаря для кириллицы

Здравствуйте! Появилась надобность написать программу на С++, шифрующую русские строки, считываемые из файла с кодировкой UTF-8Использую STL wstring

320
Дизассемблирование кода в codeblocks

Дизассемблирование кода в codeblocks

Здравствуйте! Подскажите, пожалуйста, как дизассемблировать код в codeblocks?

385