如何使用strlen计算sprintf中的空间和负载

时间:2014-01-16 18:29:51

标签: c++

我想在每次迭代中存储地址值,并在稍后的时间点打印zip。现在使用下面的代码,我想念最后的零。如果地址值在3次迭代中为5450,3220,3450,我想打印

5450  3220  3450

但是下面有代码打印 545322345。如何使它计数0和空格。

char zip[100];
char addr[100];
for (int i=0; i<10; i++)
        {

            SPRINTF(zip+strlen(zip),addr);

        }

#define SPRINTF(string_in, args...)   \
            (void)snprintf(string_in, sizeof(string_in),## args)

1 个答案:

答案 0 :(得分:2)

这更有可能做你想做的事情:

for (int i=0; i<10; i++)
{
    // ... whatever is setting 'addr' to something new

    strncat(zip, addr, sizeof(zip));
}

现在我们使用zip(100)的大小,而不是指针的大小,并且即使缓冲区中剩余的“空”空间较少,大小仍然是正确的。