【问题标题】:array initializer must be an initializer list or string literal c数组初始值设定项必须是初始值设定项列表或字符串字面量 c
【发布时间】:2019-04-16 23:26:43
【问题描述】:

我是 C 的新手。我不知道为什么会出现这个错误以及如何修复它?

void FPS_PRINT_ENROLLED(){
  int checkNum = 0;
  int ID = 0;
  int num_Enroll = 0;
  num_Enroll = Available_ID();
  char strNum[3] = 0;
  itoa(num_Enroll, strNum);
  uint32_t numLen = strlen((char *)strNum);
  UART_send_A3("Number of Stored Prints: ", 25);
  UART_send_A3(&strNum, numLen);
  }

错误信息是:array initializer must be an initializer list or string literal

请查看随附的错误消息屏幕截图。另外附上c文件。

顺便说一下,这是在使用 C 语言的 PSoC Creator 4.1 中。

code file download link through GoogleDrive

【问题讨论】:

  • 这一行:char strNum[3] = 0; 是个问题。左边的变量是一个包含三个元素的字符数组。右边的初始化器是一个标量 int。它们的类型不匹配。尝试将初始化程序放在花括号中,这将为每个元素分配 0,如下所示:char strNum[3] = {0};
  • @bruceg 很好的解释。这应该作为答案。
  • 伟大的@bruceg,谢谢!

标签: c string literals initializer psoc


【解决方案1】:
char strNum[3] = 0;

这一行创建了一个三字符的字符串。然后,您可以将其用作带有函数 strlen 和 uart_send 的字符串。

作为 C 字符串,它必须以空字符结尾,因此您只有两个可用字符。它还必须初始化为一个字符串,编译器告诉你你没有正确地这样做。

试试这些行之一

char strNum[3] = ""; // Empty string
char strNum[3] = "AB"; // Full string
char strNum[3] = "0"; // String holding the character zero

【讨论】:

  • 详情:虽然所有3个数组元素都初始化为零,但字符串只有1个字符:strNum[0]
  • 太棒了!我将其更改为 char strNum[3] = "0";并让它工作。如果我保持这样或者你只是在向我解释,这会影响我的代码吗?
  • 不,这是一段完全有效的代码。请记住,它是数字的字符串表示形式,而不是数字。您不能像数字一样增加或修改它。如果您对此有任何疑问,最好再问一个问题。
  • 如果你的语句“它也必须被初始化为一个字符串”的意思是说char的数组必须用一个字符串字面量来初始化,那么它是不正确的。正如编译器消息所指出的,它可以使用初始化列表(括在大括号中)进行初始化,例如 { 2, 1, 0 }{ 'a', 'b', 0 }
  • char strNum[3] = 0; 没有创建插孔,它不是有效的 C。因此编译器错误。
猜你喜欢
  • 2020-07-31
  • 1970-01-01
  • 2021-10-29
  • 2011-01-03
  • 1970-01-01
  • 2010-10-03
  • 2016-01-22
  • 1970-01-01
  • 2016-07-25
相关资源
最近更新 更多