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

C++ 如何使用strlen计算sprintf中的空间和负载,c++,C++,我希望在每次迭代中存储地址值,并在稍后的时间点打印zip。现在有了下面的代码,我错过了最后的零。如果地址值在3次迭代中为545032203450,我想打印 5450 3220 3450 但下面的代码会打印出来 545322345。如何使其计数为0和空格 char zip[100]; char addr[100]; for (int i=0; i<10; i++) { SPRINTF(zip+strlen(zip),addr);

我希望在每次迭代中存储地址值,并在稍后的时间点打印zip。现在有了下面的代码,我错过了最后的零。如果地址值在3次迭代中为545032203450,我想打印

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)
char-zip[100];
字符地址[100];

对于(int i=0;i而言,这更有可能实现您想要的功能:

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

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

for(int i=0;iIs sprint)输入错误或我们不知道的宏?你真的在胡说八道:5050是有效数字吗?对不起,它的宏与snprintf相同。那么你的代码打印在哪里呢?请注意,
SPRINTF
宏,如所称,变成了
snprintf(zip+strlen(zip),sizeof(zip+strlen(zip)),addr)
。看起来像
sizeof(char*)
对于您来说是
4
,因此每次最多添加4个字符(3个来自
addr
+结尾
0
字节)。