gpt4 book ai didi

c - 多次调用 char[] 立即返回函数 fprint

转载 作者:太空宇宙 更新时间:2023-11-04 07:53:58 25 4
gpt4 key购买 nike

我正在寻找一种将自定义类型变量转换为 char[](字符串)以便立即打印的舒适方法。这是我打算做的,但仍然存在缺陷。

#include <stdio.h>
#include <string.h>

char * toStr (int);

void main (void) {
printf("%s , %s , %s \n", toStr(1), toStr(2), toStr(3));
}

char * toStr (int z) {

static char oS[100];
sprintf(oS, "%d", z);
printf("Will return: %s\n", oS);
return oS;
}

这将显示

Will return: 3
Will return: 2
Will return: 1
1 , 1 , 1

我明白这里的问题是什么,printf 似乎为其参数列表中的所有三个调用打印一次 static char oS 的内容。当格式字符串中需要时,它不会准确地评估每个调用。但是我需要静态(作为一种可能的方式)来使 oS 的内容在 toStr 之外可用。我觉得我快到了,当然我想要输出

1 , 2 , 3

在屏幕上。是否有可能获得我想要的东西,而不必分配和释放每个部分或将 toStr 的每个返回存储在一个单独的变量中只是为了在后面打印它们?不是可以在一次调用中多次打印同一个函数的返回值吗?

最佳答案

局部static 变量在函数的所有调用之间共享。这意味着所有调用都将使用相同的缓冲区并返回指向相同字符串的相同指针。

并且由于未指定参数的求值顺序(我不记得它是实现定义的、未定义的还是只是未指定),因此您不知道最后一次调用是哪个(将是调用决定数组的内容。

唯一知道的唯一一件事是,所有参数必须在实际调用函数之前被求值。不会延迟评估参数和表达式。

关于c - 多次调用 char[] 立即返回函数 fprint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51856963/

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