Ваша проблема в том, что вы возвращаете TXT.
Txt - только локальный указатель на символ, который существует только внутри функции ToUpper.
С
Регистрация [I] = ToUpper (р);
Вы назначаете этот указатель для Register [i].
Теперь вы снова вызываете ToUpper, и старый текст будет перезаписан следующими символами TEST2.
Теперь регистр [0] указывает на начало текста TEST2.
Это продолжается до последнего вызова с test4.
Затем зарегистрируйте [0..3] все точки в одном и том же месте, и это будет началом последних txt-символов (TEST4).
Таким образом, вы печатаете TEST4 4 раза.
(Большая проблема в том, что память txt больше не выделяется и может изменяться в любое время во время выполнения)
Это работает в вашем случае, но не очень хороший код, потому что он использует фиксированный размер ваших тестовых строк. Но потом ты сможешь очистить себя.
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <fstream>
char *Register[5];
char *ToUpper(char *const string)
{
int i=0;
for(i = 0; i<=strlen(string); i++)
{
if(( string[i]>='a')&&( string[i]<='z'))
string[i]=string[i] - 32;
}
return string;
}
int main () {
int i =0;
for(i=0;i<=4;i++)
{
Register[i]=(char*)malloc(strlen("testN"));
if(i==0)strcpy(Register[i],"test1");
if(i==1)strcpy(Register[i],"test2");
if(i==2)strcpy(Register[i],"test3");
if(i==3)strcpy(Register[i],"test4");
ToUpper(Register[i]);
}
printf("%s",Register[0]);
printf("%s",Register[1]);
printf("%s",Register[2]);
printf("%s",Register[3]);
return(0);
}
обратите внимание, что код работает только потому, что фиксированные размеры ваших примеров. Поскольку я не знаю, что вы хотите сделать, измените фиксированную длину malloc так, как вам это нужно.