我试图将一个整数数组附加到一个字符串中,基本上,我试图将其设置为以下格式:A :123456,其中A是一个字符,由一个参数给出,而123456是一个整数数组。我在运行代码时得到了一个总线错误,我在这里做了一个搜索,并在google上搜索了一个正确的方法来做一些与我一直希望实现的类似的事情,但是这些例子与此并没有直接的关系,所以我想我是否能得到一些帮助。提前感谢
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;
}发布于 2014-09-24 13:20:36
不能将“附加”“附加”到由以下内容定义的字符串:
char *result = "";提供给您的只是一个名为result的指针,它指向内存中存储字符'\0' (字符串终止符)的单个只读位置。你不能写信给它。
您需要有一个适当大小的实际缓冲区:
char *result = malloc(128);如果分配成功,那么您就有了所谓的“堆缓冲区”,即使执行分配的函数退出,这个缓冲区也会继续存在。您可以安全地return这个指针,不像一个本地数组,它会在函数退出时消失。
然后可以使用sprintf(),但当然不能使用+=,不能在C中添加字符串。最好的解决方案可能是将sprintf()添加到临时小字符串,然后将该字符串添加到result上。您可以跟踪附加长度,以使其快速,但这不是关键的小问题上的现代机器。
发布于 2014-09-24 13:44:26
尝尝这个
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);
}发布于 2014-09-24 14:03:25
您可以编写自己的函数,并在snprintf范例上对其建模,该范例接受一个缓冲区及其长度,并使用所需的字符串填充该缓冲区。如果缓冲区太小,则字符串将被截断,但仍然是有效的、以空结尾的字符串:
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;
}您可以这样调用该函数:
char buf[20];
str_cards_played(buf, sizeof(buf), player);
printf("'%s'\n", buf);如果像这里这样在堆栈上分配,则不必担心内存管理。
https://stackoverflow.com/questions/26017937
复制相似问题