我的代码:
#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/