У меня есть некоторые проблемы с индикатором в C ++. Я написал программу, которая вызывает функцию — ее задача заключается в добавлении c-строки «UWAGA:» перед тем, как c-строка включается в массив (какой адрес отправляется в качестве аргумента). Если длина этой c-строки превышает размер табуляции, она должна изменить последние три знака на «.» знак.
Он работает, когда я пытался напечатать указатель twsk, но не изменяет содержимое tab []. КСТАТИ. внутри моей функции, когда я печатал индикатор w, он показывает только первичную c-строку. Может кто-нибудь сказать мне, почему он не изменяет мой массив вкладок?
PS. Извините за мой английский.
#include <iostream>
#include <cstring>
using namespace std;
char * dopisywacz(char *w, int size);
int main()
{
int size = 50;
char tab[size] = {"jakis c-string."};
cout << dopisywacz(tab, size) << endl;
}
char * dopisywacz(char *w, int size)
{
char *poczatek = w;
char str[] = {"UWAGA: "};
int dlugosc = strlen(w);
char temp[size];
char *twsk = temp, *tpocz = twsk;
int counter = 7;for (int i = 0; i < 7; i++)
{
*twsk++ = str[i];
}
while(*temp)
{
*twsk++ = *w++;
counter++;
if (counter == size)
{
*twsk -= 4;
for (int i = 0; i < 3; i++)
{
*twsk++ = '.';
}
break;
}
}
*twsk = 0;
twsk = tpocz;
while (*(w) = *(twsk))
{
w++;
twsk++;
}
w = poczatek;
return w;
}
Вероятно, вам нужно откатить указатель перед копированием:
w = poczatek; // Restore pointer to initial position
while (*(w) = *(twsk))
{
w++;
twsk++;
}
return poczatek;
Передать массив как ссылку
char * dopisywacz(char*& w, int size);