[英]Time optimization for string formatting: pad a line to length K by adding spaces between words
[英]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.