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

标签 c

我的代码:

 #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/

相关文章:

c - 内核编译但不会与 unistd.h 引用链接

c - 如何编写涉及 Unicode 的 C 代码?

c++ - 如何打印目录树?

c - C是强类型的吗?

c - 在 C 中始终为静态函数提供函数原型(prototype)是一种好习惯吗?

c - `if(!*str) ...` 对于 `char* str` 意味着什么?

c - 动态分配的二维数组

c - 如何在 Make 中使用 ccache?

我可以计算 double 引入的误差吗?

c - memset + 空格 + memcpy