c - 使用指针作为函数参数读取并显示姓名和年龄

标签 c function pointers

我想编写一个函数来读取某人的姓名和年龄,以及一个在使用指针作为参数后显示他们的函数。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void read(char **name, int *age)
{
  printf("name: ");
  scanf("%s", *name);
  printf("age: ");
  scanf("%d", age);
}

void write(char *name, int age)
{
  printf("%s, %d\n", name, age);
}

int main(void)
{
  char *name;
  int age;
  read(&name, &age);
  write(name, age);
  free(name);
  return 0;
}

当我运行它时,我收到错误消息:进程终止,状态为 -1073741819(0 分钟,2 秒)。是不是因为我没有给name分配内存?你能解释一下我做错了什么吗?

最佳答案

您没有分配 name,这会导致您的应用程序崩溃,因为 scanf 可能通过尝试在应用程序空间之外写入内存而导致访问冲突。

您将需要 malloc 一些空间:

char *name = (char*) malloc(sizeof(char) * 256);

或者在堆栈上分配一些空间(并在最后删除对 free(name) 的调用):

char name[256];

关于c - 使用指针作为函数参数读取并显示姓名和年龄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54972438/

相关文章:

c++ - 将未知长度数组从 c 返回到结构体中的 Swift

c - Makefile - 用于 C 程序的 Unix

c - 函数从 C 中的字符串创建数组,无需 strtok

c - 为什么我们应该在将缓冲区发送到函数之前使用它

Python oct() 函数缺少预期的 0oXXXX 前缀?

c - Hackerrank 圆形阵列旋转分割错误

ios - 找到可用的网格位置

c - 关于setuid的问题

c++ - 函数式 C++11 奇怪的行为

c++ - 动态创建的数组