【发布时间】:2015-07-09 20:42:57
【问题描述】:
我是 C 新手,在尝试格式化字符串时遇到了麻烦。
我用来打印的格式是这样的:
cp = "42947295";
printf("String value: \"%-10s\" <--> Unsigned long value: %10lu\n", cp, dwAtoDW(cp));
cp = "123456789";
printf("String value: \"%-10s\" <--> Unsigned long value: %10lu\n", cp, dwAtoDW(cp));
cp = "100000";
printf("String value: \"%-10s\" <--> Unsigned long value: %10lu\n", cp, dwAtoDW(cp));
unsigned long dwAtoDW(char* cpPtr) {
number = 0;
while (*cpPtr) {
if (*cpPtr >= '0' && *cpPtr <= '9') {
number *= 10;
number += *cpPtr - '0';
} else {
return 0;
}
*cpPtr++;
}
return number;
}
我有以下输出:
字符串值:“4294967295” 无符号长值:4294967295 字符串值:“123456789” 无符号长值:123456789 字符串值:“100000” 无符号长值:100000如您所见,当打印长度小于 10 个字符的值时,它会在两个引号之间打印空格。我想要的是保持正确的对齐方式,用引号括住整数,如下所示:
字符串值:“4294967295” 无符号长值:4294967295 字符串值:“123456789” 无符号长值:123456789 字符串值:“100000” 无符号长值:100000有没有办法用 printf 格式代码做到这一点?
谢谢。
【问题讨论】:
-
我怀疑这是可能的,因为
"s 不是正在打印的值的一部分。一些 hacky 是让dwAtoDW适应遇到"s(忽略它们),然后将cp分配更改为cp = "\"100000\""; -
是的,它应该这样工作,但问题是那些
cp值根本无法修改(忘记提及)。感谢您的回答!
标签: c