gpt4 book ai didi

c - 如何保存来自另一个函数的打印字符串?

转载 作者:行者123 更新时间:2023-11-30 21:36:24 25 4
gpt4 key购买 nike

我想测试一个类型为“void”的函数,它会打印一些东西。因此我考虑使用sprintf并保存 printExample 的输出在 testString 的数组中功能。

我的想法:

void printExample(){

printf("This is a string");
}

void testString(){
char stringArray[100];
sprintf(stringArray,"%s",printExample());
printf("%s",stringArray);
}

int main(){
testString();
}

想要在控制台上输出:这是一个字符串

printExample()的调用似乎有问题在我的sprintf , 有什么建议么? :)

最佳答案

printf 输出被称为“副作用”,它不会由函数返回。

在这种情况下,稍微复杂的解决方案是将 stdout 重定向到文件,然后检查文件的内容。

例如:

char* testString()
{
// Redirect stdout to stdout.log
int out = open("stdout.log", O_RDWR|O_CREAT|O_APPEND, 0600);
int save_out = dup(fileno(stdout));

// Run function to be tested
printExample() ;

// restore stdout
fflush(stdout); close(out);
dup2(save_out, fileno(stdout));
close(save_out);

// Read back captured output
static char stdout_capture[100] ;
memset( stdout_capture, 0, 100 ) ;
FILE* fp = fopen( "stdout.log", "r" ) ;
fread( stdout_capture, 1, sizeof(stdout_capture) - 1, fp ) ;
fclose( fp ) ;

// return captured text to caller
return stdout_capture ;

}

int main()
{
printf( "%s\n", testString() ) ;
}

注意,为了清楚起见,我省略了文件 I/O 中的任何错误检查代码。您可能想添加一些!

关于c - 如何保存来自另一个函数的打印字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54118176/

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