Необходимо написать параметры и тело функции 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;
}
Так же нужно найти ошибку в выделении памяти.
Для массивов символов не работает присваивание строковых литералов. Чтобы в такой массив записать какую-то строку, нужно использовать функцию strcpy из string.h:
void func(int& a, char word[])
{
strcpy(word, "text");
a = a*6;
}
Еще, лучше не называть переменные ничего не значащими именами value1, value2, а называть их согласно назначению.
Странное какое-то задание, неочевидное, и код более чем странный. Вероятно вы даже не понимаете, что делаете. А проблема в том, что word это не внешний массив, который можно изменить простым присваиванием, а указатель.
Т.е. нет никакой разницы между
void func(int& a, char word[])
и
void func(int& a, char* word)
Внутри функции же присваивается адрес локальному для функции указателю.
Т.е. то, что снаружи функции value2 фактически никак не меняется. Чтобы оно изменилось, нужно записать данные по указателю word, а не изменить сам указатель. Для строк это можно сделать так:
strcpy(word, "text");
Ну а ещё delete value2; следует заменить на delete [] value2;, т.к. выделяли память для массива, то и удалять надо как для массива.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей