我有一个用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
答案 0 :(得分:1)
您将'\0'
写入字符串的元素20(不存在)。
这是未定义的行为。