c - 使用 malloc() 创建字符数组时抛出异常
问题描述
本质上,我正在尝试创建一个程序,该程序只接受用户的输入,然后使用动态分配的内存进行打印。是的,我知道如何以简单的方式做到这一点,但我正试图掌握 C 中内存管理的复杂性。那么这段代码有什么问题?它运行没有错误,但是当我在命令行中输入一个字符串时,它停止工作并在十六进制地址处引发异常。先感谢您。
int main() {
char *input;
input = (char *)malloc(20 * sizeof(char));
puts("Enter the string you wish to display");
scanf_s("%s", input);
printf_s("%s", *input);
free(input);
return 0;
}
解决方案
你的编译器应该警告你这一行:
printf_s("%s", *input);
如果没有,您需要启用“所有警告”设置。(在 gcc 和 clang 上,添加-Wextra
到命令行。)
本质上,参数类型 ( char
) 与格式字符串 ( const char*
) 预期的类型不匹配。*input
取消引用字符指针,因此计算字符串中的第一个字符。"%s"
需要一个指向以 nul 结尾的字符数组的指针。
如果您删除它应该可以工作*
:
printf_s("%s", input);
推荐阅读
- ms-access - 生成包含期初和期末余额的 MS Access 报告
- android - 如何在重新启动后重新启动服务而不通过前台服务显示任何通知
- deepsecurity - 我可以使用 DeepSecurity API(带有 java sdk)检查扫描和检测到的病毒列表吗?
- javascript - 加入服务器时将新成员静音
- javascript - React js - 单击浏览器后退按钮时如何恢复过滤器?
- c - 如果我在 scanf 中传递变量值而不是变量引用会发生什么?
- python - 如何修复 TypeError:ord() 期望一个字符,但找到长度为 403 的字符串?
- internationalization - 如何使用 Sphinx 翻译代码块中的注释
- javascript - 添加更多值
- sql - TSQL - LEFT JOIN 奇怪的结果