gpt4 book ai didi

c - 返回值赋值时的错误消息

转载 作者:行者123 更新时间:2023-11-30 17:01:45 24 4
gpt4 key购买 nike

我的代码:

 #include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>

char * callMe(char *buf_test, const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
vsnprintf(buf_test, sizeof(buf_test), fmt, ap);
va_end(ap);
return buf_test;
}

int main()
{
char buf_t[100];
int test_flag =1;
buf_t = callMe(buf_t, "Test successful : %d", test_flag);
printf("\n\n Result = %s", buf_t);
}

错误:

error: array type 'char [100]' is not assignable
buf_t = callMe(buf_t, "Test successful : %d", test_flag);
~~~~~ ^
1 error generated.

最佳答案

您不能分配给数组。您需要这样说:

char *result = callMe(buf_t, "Test successful : %d", test_flag);
printf("\n\n Result = %s", result);

您也遇到了此行的问题:

vsnprintf(buf_test, sizeof(buf_test), fmt, ap);

buf_test 被声明为 char*,因此对其应用 sizeof 将返回指针的大小。由于您得到“Test su` 返回,这意味着指针大小为 8 个字节。尽管该变量指向一个数组,但编译器无法推断这一点。

您需要将缓冲区的大小传递到函数中:

char * callMe(char *buf_test, size_t size, const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
vsnprintf(buf_test, size, fmt, ap);
va_end(ap);
return buf_test;
}

然后在调用时传递大小:

callMe(buf_t, sizeof(buf_t), "Test successful : %d", test_flag);

编译器将能够计算出此处数组的大小,因为它可以访问变量的完整定义。

关于c - 返回值赋值时的错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36836334/

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