1613551 发表于 2022-5-28 16:49:07

字符指针的问题

如果这样写的话,字符指针要怎么初始化?
#include <stdio.h>

int main(void)
{
      char *name;

      printf("What's your name:");
      scanf("%s", name);
      printf("Your name is %s\n", name);

      return 0;
}

风车呼呼呼 发表于 2022-5-28 16:55:31

用字符数组存,指针指向字符数组

1613551 发表于 2022-5-28 17:18:33

风车呼呼呼 发表于 2022-5-28 16:55
用字符数组存,指针指向字符数组

不好意思可能是我没有表述清楚问题

1613551 发表于 2022-5-28 17:19:28

小甲鱼说这个代码的问题是因为字符指针没有初始化

1613551 发表于 2022-5-28 17:20:51

风车呼呼呼 发表于 2022-5-28 16:55
用字符数组存,指针指向字符数组

小甲鱼说这样写的话是一个野指针,可是scanf不是会把数据传到指针name里面吗

风车呼呼呼 发表于 2022-5-28 17:48:04

1613551 发表于 2022-5-28 17:20
小甲鱼说这样写的话是一个野指针,可是scanf不是会把数据传到指针name里面吗

scanf将从标准输入接收的字符串写入以某个地址为首地址的一片内存空间中,以 '\0' 结尾。
这个地址就是name的值,即指针name指向的位置。不是放到存放指针变量自己的内存空间

指针不初始化,它里面存放的数据就是垃圾,但是又会被解释为一个地址,这块地址完全无法预测是在哪里,它甚至可能存放系统参数,对这种指针进行间接访问甚至修改里面的内容是绝对危险的,编译器基本都必须制止用户这样的操作,不然谁敢想像学个C入门会有把电脑玩崩的危险。这种指向非法空间的就是野指针。

只要是系统没分配给你的,都是非法空间。你只有指针是存不了字符串的,需要足以存放所输入字符串的合法空间,所以要用字符数组。

傻眼貓咪 发表于 2022-5-28 17:55:42

#include <stdio.h>
#include <malloc.h>

int main(void)
{
      char *name = (char*)malloc(20);

      printf("What's your name:");
      scanf("%s", name);
      printf("Your name is %s\n", name);
      
      free(name);
      name = NULL;

      return 0;
}

1613551 发表于 2022-5-28 18:55:00

傻眼貓咪 发表于 2022-5-28 17:55


牛,确实实现这个功能了,但是代码我看不懂

傻眼貓咪 发表于 2022-5-28 19:51:57

1613551 发表于 2022-5-28 18:55
牛,确实实现这个功能了,但是代码我看不懂

一般创建指针时,如果没有初始值,它只会随机指向垃圾数据。最好就是在创建时,指向 NULL。
但是你的代码 char* 是 char 类型指针,一个字符。如果指向 NULL ,下次你想再指向别的东西时,只能是单个字符,而不是字符串。因为指针地址只有一个 char 大小的内存区块,所以必须分配多一些空间给它。我的代码分配 20 个 char 内存给它,就能正常用 scanf() 输入你想要的字符串了。
记得最后要释放内存,将指针指向 NULL(防止野指针)
页: [1]
查看完整版本: 字符指针的问题