gpt4 book ai didi

c - 使用 snprintf() 填充 char 数组

转载 作者:行者123 更新时间:2023-11-30 20:58:22 26 4
gpt4 key购买 nike

我正在尝试在条件下用值填充字符数组。问题是我无法正确使用 snprintf()

    char staedte[MAX_LAENGE_ARR][MAX_LAENGE_STR];
char laender[MAX_LAENGE_ARR][MAX_LAENGE_STR];
int bewohner[MAX_LAENGE_ARR];


char *p = (char*) malloc(len);
if (p == NULL){
perror("malloc failed while allocating an array of chars.");
exit(1);
}

for (int i = 0; i < MAX_LAENGE_ARR; i++) {
if(strcmp(bundesland,laender[i]) == 0 && bewohner[i] >= anzahl){
snprintf(p,MAX_LAENGE_STR,"Die Stadt %s hat %d Einwohner. \n", staedte[i],bewohner[i]);
snprintf(&p[i],MAX_LAENGE_STR,"Die Stadt %s hat %d Einwohner. \n", staedte[i],bewohner[i]);
}
}
free(p);
}

最佳答案

snprintf() 返回写入字符串的字节数。您可以使用它来增加写入下一行的位置。

int offset = 0;
for (int i = 0; i < MAX_LAENGE_ARR; i++) {
if(strcmp(bundesland,laender[i]) == 0 && bewohner[i] >= anzahl){
int written = snprintf(p + offset, len - offset, Die Stadt %s hat %d Einwohner. \n", staedte[i], bewohner[i]);
printf("%s : %d\n",staedte[i] , bewohner[i]);
offset += written;
}
}

我不确定您为什么要调用 snprintf() 两次。我删除了只写入 p 的那个。

由于 p 字符串的长度为 len 字节,因此在指定 snprintf() 中写入的最大数量时应使用该长度,而不是 MAX_LANGE_STR。您必须从中减去 offset,因为每次写入都在字符串中更远的地方,并且后面留下的空间更少。

关于c - 使用 snprintf() 填充 char 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52993788/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com