我正在尝试打印"你好"在数组中但对角使用标准函数 snprintf :
这是我所做的但不起作用的代码可能表明我做错了:
int main(void)
{
int i, u;
char buff[26] = {0};
char abc[] = "hello";
for (i = 0, u = 0; i < 6; i++, u++)
snprintf(buff+u, 6, "%*c\n%c", u, abc[i], i);
puts(buff);
return 0;
}
输出应为:
h
e
l
l
o
谢谢
答案 0 :(得分:4)
更改为
for (i = 0, u = 0; i < 5; i++)
u += snprintf(buff+u, sizeof(buff) - u, "%*c\n", i+1, abc[i]);
答案 1 :(得分:1)
使用snprintf
解决此问题的另一种方法:
#include <stdio.h>
int main(void)
{
int i, j;
char buf[40];
char abc[] = "hello";
for (i = 0, j = 0; i < 5; ++i, j += i+1) {
snprintf(buf+j, i+3, "%*c\n", i+1, abc[i]);
}
printf("%s",buf);
return 0;
}
j
跟踪每次迭代snprintf
应写入buf
的位置。 i+3
是写入buf的字符数量,包括换行符char和null终止字符。在循环的每次迭代中,前一个空终止字符被覆盖 - 这是因为j += i+1
。
输出是:
h
e
l
l
o