繁体   English   中英

通过添加空格('')直到长度20来进​​行字符串操作

[英]String manupulation by adding spaces (' ') upto length 20

我有一个用atv128的avr gcc编写的函数,如果字符串的长度小于20以在LCD上显示,则在字符串中添加额外的空格。 当我不连续使用此功能时,输出是预期的,但是当我连续使用并显示输出时,仅显示最后一个字符串。 是什么原因导致这种问题?

void parse(uint8_t* str, uint8_t endlen, uint8_t charac)
{
    //str is string passed, charac is the fill character, endlen is length of string passed
    uint8_t len = 0;    // length count start from 0    

    while(str[len] != '\0') {
        len++;      
    }
    while(len < endlen){
        str[len] = charac;
        len++;
    }
    str[endlen] = '\0';
}

当我将此程序称为

int main(void){
    uint8_t str1[20] = "0123456789";
    uint8_t str2[20] = "abcdefghij0123456789";

    parse(str1, 20, ' ');           
    fprintf(stderr, "%s", str1);
    parse(str2, 20, ' ');
    fprintf(stderr, "%s", str2);
    while(1);
}

输出为:

0123456789

abcdefghij0123456789

但是当我将函数称为

int main(void){
    uint8_t str1[20] = "0123456789";
    uint8_t str2[20] = "abcdefghij0123456789";

    parse(str1, 20, ' ');           
    parse(str2, 20, ' ');
    fprintf(stderr, "%s", str1);
    fprintf(stderr, "%s", str2);
    while(1);
}

输出为:

abcdefghij0123456789

您将'\\0'写入字符串的元素20(不存在)。 这是未定义的行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM