【问题标题】:error: initialization with “{…}” expected for aggregate object - c错误:聚合对象需要使用“{…}”进行初始化 - c
【发布时间】:2014-10-15 08:44:46
【问题描述】:

我是 c 新手,正在尝试编写程序,但我不断收到此错误:“聚合对象应使用“{…}”进行初始化”。

这是程序:

printf("password must be 5 charachters\n");
char password[] = scanf("%s", password);
int PasswordCalculation = strlen(password);
if (PasswordCalculation == 5)
{
    printf("good job!");
}
else
{
    printf("error");
}
getchar();
return 0;

我在“scanf”函数上收到此行的错误:

char password[] = scanf("%s", password);

错误是什么意思,我该如何解决?

【问题讨论】:

  • 作为初始化器是不正确的。 char password[5+1]; scanf("%5s", password);
  • 最好使用fgets 而不是scanf

标签: c string char scanf


【解决方案1】:

你需要为字符串分配内存,然后调用scanf

   char password[64];
   scanf("%63s", password);

【讨论】:

  • hmm...代码现在是正确的,我认为这可能是您的环境中的某些内容或您运行程序的方式。您使用的代码与发布的完全相同吗?
  • 抱歉不确定,清理项目并重新编译。
【解决方案2】:

由于您刚刚学习 C,我将扩展一下 thumbmunkeys 的答案。

通常最好将数组/字符串分配得比所需的大。您的设计要求可能会在以后发生变化。

此外,%63s 而不仅仅是%s 确保scanf 将仅读取63 个字符+ 1 用于scanf 在读取字符串时自动放置在数组末尾的null 字符。否则,如果有人输入超过 63 个字符,您最终会遇到溢出问题。

进一步研究scanf here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-15
    • 1970-01-01
    • 2017-02-27
    • 2015-04-24
    • 1970-01-01
    • 2017-07-01
    • 1970-01-01
    相关资源
    最近更新 更多