使用snprintf复制数组中的字符

时间:2014-11-17 18:02:41

标签: c arrays printf

我正在尝试打印"你好"在数组中但对角使用标准函数 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

谢谢

2 个答案:

答案 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