首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将int数组附加到c中的字符串:

将int数组附加到c中的字符串:
EN

Stack Overflow用户
提问于 2014-09-24 13:16:17
回答 5查看 598关注 0票数 1

我试图将一个整数数组附加到一个字符串中,基本上,我试图将其设置为以下格式:A :123456,其中A是一个字符,由一个参数给出,而123456是一个整数数组。我在运行代码时得到了一个总线错误,我在这里做了一个搜索,并在google上搜索了一个正确的方法来做一些与我一直希望实现的类似的事情,但是这些例子与此并没有直接的关系,所以我想我是否能得到一些帮助。提前感谢

代码语言:javascript
运行
复制
char *print_cards_played(Player *player) {
    char *result = "";
    int i = 0;

    result += sprintf(result, "%c :", player->playerID);

    while(player->cardsPlayed[i] != 0) {
        result += sprintf(result, "%d", player->cardsPlayed[i]);
        i++;
    }

    result += sprintf(result, "\n");

    return result;
}
EN

回答 5

Stack Overflow用户

发布于 2014-09-24 13:20:36

不能将“附加”“附加”到由以下内容定义的字符串:

代码语言:javascript
运行
复制
char *result = "";

提供给您的只是一个名为result的指针,它指向内存中存储字符'\0' (字符串终止符)的单个只读位置。你不能写信给它。

您需要有一个适当大小的实际缓冲区:

代码语言:javascript
运行
复制
char *result = malloc(128);

如果分配成功,那么您就有了所谓的“堆缓冲区”,即使执行分配的函数退出,这个缓冲区也会继续存在。您可以安全地return这个指针,不像一个本地数组,它会在函数退出时消失。

然后可以使用sprintf(),但当然不能使用+=,不能在C中添加字符串。最好的解决方案可能是将sprintf()添加到临时小字符串,然后将该字符串添加到result上。您可以跟踪附加长度,以使其快速,但这不是关键的小问题上的现代机器。

票数 3
EN

Stack Overflow用户

发布于 2014-09-24 13:44:26

尝尝这个

代码语言:javascript
运行
复制
char *print_cards_played(Player *player) {
    char result[128];// = "";
    char *p = result;
    int i = 0;

    p += sprintf(p, "%c :", player->playerID);

    while(player->cardsPlayed[i] != 0) {
        p += sprintf(p, "%d", player->cardsPlayed[i]);
        i++;
    }

    p += sprintf(p, "\n");

    return strdup(result);
}
票数 2
EN

Stack Overflow用户

发布于 2014-09-24 14:03:25

您可以编写自己的函数,并在snprintf范例上对其建模,该范例接受一个缓冲区及其长度,并使用所需的字符串填充该缓冲区。如果缓冲区太小,则字符串将被截断,但仍然是有效的、以空结尾的字符串:

代码语言:javascript
运行
复制
int str_cards_played(char *buf, int nbuf, const Player *player)
{
    int n;
    int i = 0;

    n = snprintf(buf, nbuf, "%c: ", player->playerID);

    while(n < nbuf && player->cardsPlayed[i] != 0) {
        n += snprintf(buf + n, nbuf - n, "%d", player->cardsPlayed[i]);
        i++;
    }

    if (n < nbuf) n += snprintf(buf + n, nbuf - n, "\n");
    return n;
}

您可以这样调用该函数:

代码语言:javascript
运行
复制
char buf[20];

str_cards_played(buf, sizeof(buf), player);
printf("'%s'\n", buf);

如果像这里这样在堆栈上分配,则不必担心内存管理。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26017937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档