Casper-SC
@Casper-SC
Программист (.NET)

Как передав указатель в функцию на char внутри функции записать туда строку и вернуть ещё и кол-во символов в строке?

ДОБАВЛЕНО ПОЗЖЕ:
Я пробовал разные варианты и просто дальше не разбирался. Если там где-то жесть, то просто покажите как делать. Не надо мне объяснять, что там жесть, я сам знаю. Нет времени, типа у меня нет, а ты должен его вдруг тратить, так проходи мимо, я тебя не заставляю. Задача смешнейшая, просто я на работе и не могу ща на это отвлекаться, плюсами не занимался очень давно. Ещё раз прошу, занятые, не тратьте время, не пишите мне чушь в комментариях, я вас не заставляю писать за меня что-то. Целую сложнейшую задачу на пол минуты!!!
---------------

Вопрос:

Вот нагородил, нет к сожалению времени разбираться. Начинал давно учить плюсы, но чёт всё выветрилось. Позже начну по новой, а сейчас нужна помощь :)

#include <stdlib.h>
#include <string>
#include <iostream>

using namespace std;

void securityLib_GetCode(const char** value, size_t* length)
{
	char* code = "CODE";
	*value = "CODE";

	char *arrPtr = &code[0];
	*length = strlen(arrPtr);
}

int main()
{
	const char* text = 0;
	size_t * length = 0;
	securityLib_GetCode(&text, length);

	cout << "Code = " << *text << endl;
	cout << "Code length = " << *length << endl;

	system("pause");
	return EXIT_SUCCESS;
}
  • Вопрос задан
  • 390 просмотров
Пригласить эксперта
Ответы на вопрос 2
vt4a2h
@vt4a2h Куратор тега C++
Senior software engineer (C++/Qt/boost)
std::string securityLib_GetCode()
{
   return "CODE";
}
// ...
auto code = securityLib_GetCode();
auto size = code.size();
auto raw = code.c_str();

Всегда используйте std::string в качестве обёртки над char *. Ну кроме очевидных случаев, например, когда это API какого-нибудь модуля и может случиться беда из-за разных рантаймов.
Ответ написан
Daniro_San
@Daniro_San
Программист
Не нужно мешать C++ с C!
Во первых как можно скорее завязывайте использовать char* для строк.
Используйте для этого std::string. Всегда используйте для этого std::string.
И как .NET программисту вам будет проще использовать std::string, по аналогии с System.String
Во вторых старайтесь использовать библиотеки C++, а не Си
В третьих если уж берётесь за указатели, то инкапсулируйте их внутри классов или не используйте вовсе.

Вот как можно переписать ваш код на C++
#include <iostream>

void securityLib_GetCode(std::string &str, size_t &length) {
    const std::string key = "CODE";
    str= "CODE";
    length = key.size();
}

int main() {
  std::string text;
  size_t length = 0;
  securityLib_GetCode(text, length);
  cout << "Code = " << text << endl;
  cout << "Code length = " << length << endl;
}


Дело другое что сама логика кода кажется чуточку бессмысленной)

Отдельно скажу про
char *arrPtr = &code[0];
Это просто много лишних символов. Зачем брать адрес первого элемента?
char *arrPtr = code; // Будет взят адрес текущего положения code
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы