【问题标题】:printing arrays break error打印数组中断错误
【发布时间】:2016-09-26 23:18:35
【问题描述】:
#include <stdio.h>
#include <string.h>

char name[24];

int main(void)
{
    printf("Type the name of a cartoon character.");
    printf(">>> ");
    scanf_s("%s", name);

    printf("\n\nCharacter name: %s", name);
    return 0;
}

我无法将其打印出来。我不确定哪里出了问题,因为编译器没有给我任何错误。然而, 运行程序时出现中断错误。任何帮助,将不胜感激。谢谢。

【问题讨论】:

  • 阅读scanf_s 的手册页会有所帮助...始终阅读您使用的函数的文档!并启用所有推荐的警告!中途的现代编译器应该发出警告。
  • 我使用 scanf_s 是因为 Visual Studio 不会让我像 scanf 那样运行程序。有没有办法解决这个问题?
  • 是的:正确使用!其余的:请参阅我的第一条评论。
  • "有没有办法解决这个问题?" scanf_s 上的文档给出了正确用法的示例。 msdn.microsoft.com/en-us/library/w40768et.aspx
  • 好吧,让我有点遗憾:scanf_s 想要缓冲区的大小作为第三个参数,所以scanf_s("%23s", name,(unsigned)_countof(name) ) 应该这样做。如手册页中所述,顺便说一句。

标签: c arrays printing


【解决方案1】:

我要感谢所有试图帮助我的人。离开一段时间后,我注意到一些没有意义的事情。感谢您提供这段代码:

    #define _CRT_SECURE_NO_WARNINGS

这使得使用 scanf 成为可能,因为 MSVC 需要 scanf_s。这是工作代码。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

char question(void);
char name[24];

char main(void)
{
    question();
    system("pause");
}

char question(void)
{
    printf("Type the name of a cartoon character >>> ");
    scanf("%s", name);

    printf("\n\"%23s\"\n\n\n", name);

    return 0;
}

我最初将 main 作为 int 可变参数而不是 char。不知道为什么 MSVC 没有向我提出争论,但它完全忽略了两者的区别。

【讨论】:

    【解决方案2】:

    我认为您的扫描功能有误。如果你在 C 中工作,它应该是scanf()

    在 C 中打印数组也很困难。您必须遍历数组中的每个元素并打印它。

    所以:

    for(x ; i < n ; i++){
      printf("Element is: %s" , name[i])
    }
    

    【讨论】:

    • scanf_s 是可选边界检查接口的一部分。尽管如此,它仍然是标准的一部分。并且 OP 显然没有数组数组,resp。指向数组的指针数组。
    • 遍历 char 数组以打印字符串?如果有的话,占位符将是 %c,而不是 %s。 scanf_s 是一个检查缓冲区边界的微软补充。
    • 是的,由于某种原因,您需要 %c fsor char 数组,我只是将 %s 用于字符串数组。
    • @JustinBesteman、Florian Heer、Olaf 谢谢。我正在为我的班级阅读的书在 C 中始终使用 %s。我将其更改为 %c。
    猜你喜欢
    • 1970-01-01
    • 2017-02-16
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多