首页 > 解决方案 > 使用 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; 
}

标签: c

解决方案


你的编译器应该警告你这一行:

printf_s("%s", *input);

如果没有,您需要启用“所有警告”设置。(在 gcc 和 clang 上,添加-Wextra到命令行。)

本质上,参数类型 ( char) 与格式字符串 ( const char*) 预期的类型不匹配。*input取消引用字符指针,因此计算字符串中的第一个字符。"%s"需要一个指向以 nul 结尾的字符数组的指针。

如果您删除它应该可以工作*

printf_s("%s", input);

推荐阅读