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

时间:2014-10-22 06:03:07

标签: c string

我有一个用avr gcc编写的atmega128函数,如果字符串的长度小于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

1 个答案:

答案 0 :(得分:1)

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