创建自定义大写方法

标签 c mplab

我正在尝试创建一个大写方法(我无法从库中使用它,因为我的软件不支持它)。问题是,当我在输出中使用我的方法时,总是来 self 的字符串的最后结果。我实在无法理解到底问题出在哪里。我相信我没有以正确的方式处理指针。

这是一个例子:

进入初始化:

char *Register[5];

在我的时间里:

char *p;
int i =0;
for(i=0;i<=4;i++)
{
    if(i==0)p="test1";
    if(i==1)p="test2";
    if(i==2)p="test3";
    if(i==3)p="test4";
    Register[i]=ToUpper(p);
}
Eusart2_Write(Register[0]);
__delay_ms(20);
Eusart2_Write(Register[1]);
__delay_ms(20);
Eusart2_Write(Register[2]);
__delay_ms(20);
Eusart2_Write(Register[3]);

这是我的上方法:

char *ToUpper(char *string)
{
    int i=0;
    char txt[255]="";
    char Buffer[255]="";

    strcpy(Buffer,string);

    for(i = 0; i<=strlen(Buffer); i++)
    {
        if(( Buffer[i]>='a')&&( Buffer[i]<='z'))
            txt[i]=Buffer[i] - 32; 
        else
            txt[i]= Buffer[i];  
    }
    txt[i++]='\0';

    return txt;
}

在我的输出中,我对所有寄存器采取相同的结果:

TEST4TEST4TEST4TEST4

最佳答案

您的 txt 数组是函数 ToUpper 的本地数组。一旦超出范围,您就无法保证其内容是什么。因此,如果您的 Register 变量是全局变量,您也可以将 txt 数组设置为全局变量。

其次,您仅在将所有字符串转换为大写后才进行写入。因此,即使您的 txt 数组是全局的,它也只会包含最近写入的内容(即“TEST4”)。解决这个问题的方法是转换后立即写入。因此,将写入移动到 for 循环中,如下所示:

for(i=0;i<=4;i++)
{
    if(i==0)p="test1";
    if(i==1)p="test2";
    if(i==2)p="test3";
    if(i==3)p="test4";
    Register[i]=ToUpper(p);
    Eusart2_Write(Register[i]);
    __delay_ms(20);
}

注意:for循环中只有四个字符串,它有5次迭代,所以当你编写时,你最终会编写TEST4两次,因为p将保留“test4”,当 i 等于 4 时。因此您还必须更正 for 循环中的控制表达式。

但是,如果您想保留 Register 中的值并在 for 循环后打印它们,那么您必须将 Register 创建为二维数组并复制返回值将 ToUpper 的值放入其中。

您的注册声明将如下所示:

char Register[5][6];  

你的 for 循环将如下所示:

for(i=0;i<4;i++)
{
    if(i==0)p=(char*)"test1";
    if(i==1)p=(char*)"test2";
    if(i==2)p=(char*)"test3";
    if(i==3)p=(char*)"test4";
    strcpy(Register[i], ToUpper(p));
    printf("%s\n", &Register[i]); 
}

查看此example .

关于创建自定义大写方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52252946/

相关文章:

c - While 循环从标准输入读取整数值

c - 当函数返回时,如何在C中关闭资源句柄?

c - 在具有不同宽度文件的 C 中使用 fscanf

c - time_t 和 char* 变量意外被覆盖

c - C语言中#pragma和_Pragma()的区别

c - 包括 PIC32MX 上 FreeRTOS 简单演示的问题

c - 通过 UART 嵌入式应用程序将 ASCII 字符串转换为 HEX 值

c - 我得到所需的错误常量表达式

c - 微 Controller 编程 - 程序不退出循环

c - 程序退出死循环(PIC单片机)?